想要使用泛型类型<T>

时间:2019-06-06 18:50:01

标签: java generics

我想使用通用类型<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>修改类Details,以便它接受任何类型的对象。 请让我知道最好的方法。

我可以如下介绍新变量(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);
    }
}

请让我知道更好的方法。

1 个答案:

答案 0 :(得分:0)

您显示的示例在逻辑,语义和设计上都是错误的。

您显示的类甚至都不相关,也不属于“常见”处理情况。

我使用了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);

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