首页 > 解决方案 > 想使用泛型类型

问题描述

我想使用泛型类型<T>,以便它接受任何类型的对象。下面是我的代码示例原始代码。

class Address{
///
}

class Person{

///

}

class Details
{
Map<String,String> addressMap;
Map<String,String> personMap;
...

//getters

//setters

public void updateAddress(String id, String case) {
        this.addressMap.put(id, case);
    }

public void updatePerson(String id, String case) {
        this.personMap.put(id, case);
    }
}

我想修改类详细信息,<T>以便它采用任何类型的对象。请让我知道最好的方法。

我可以如下介绍新变量(allObjectMap),而不是为不同的对象(addressMap,personMap)使用单独的变量。下面的示例代码。

class Details<T>
{
Map<T,String> allObjectMap;

//getter & setter
    public Map<T, String> getAllObjectMap() {
    return allObjectMap;
}

public void setAllObjectMap(Map<T, String> allObjectMap) {
    this.allObjectMap = allObjectMap;
}
public void updateAddress(String id, String case) {
       // this.addressMap.put(id, case);
     this.allObjectMap.put((T)id, case);
    }

public void updatePerson(String id, String case) {
        this.personMap.put(id, case);
  this.allObjectMap.put((T)id, case);
    }
}

请让我知道更好的方法。

标签: javagenerics

解决方案


您展示的示例在逻辑、语义和设计上都不正确。

您展示的课程甚至不相关,也不属于“常见”处理案例。

我使用了 2 个不同的类。

class Junior {

}
class Senior {

}
class Details<T> {
    Map<T, String> allObjectMap;

    public Map<T, String> getAllObjectMap() {
        return allObjectMap;
    }
    public void setAllObjectMap(Map<T, String> allObjectMap) {
        this.allObjectMap = allObjectMap;
    }
}

在你的主要方法中,

HashMap<Junior, String> map1 = new HashMap<>();
HashMap<Senior, String> map2 = new HashMap<>();
Details<Junior> juniors = new Details<Junior>();
juniors.setAllObjectMap(map1);
Details<Senior> seniors = new Details<Senior>();
seniors.setAllObjectMap(map2);

如您所见,这样做是有可能的。


推荐阅读