java - 想使用泛型类型
问题描述
我想使用泛型类型<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);
}
}
请让我知道更好的方法。
解决方案
您展示的示例在逻辑、语义和设计上都不正确。
您展示的课程甚至不相关,也不属于“常见”处理案例。
我使用了 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);
如您所见,这样做是有可能的。
推荐阅读
- c++ - 为什么在 C++ (OpenFOAM) 中包含标头会导致我的程序无法正常运行?
- javascript - 如何处理角度中的参考值传递
- django - Django ON_DELETE 策略未在数据库中应用
- amazon-web-services - 将大量数据上传到 Azure BlobStorage 的最有效方式
- jquery - 如何避免Kendo Multiselect在失去焦点时清除输入?
- javascript - 如果数组成员被包装,为什么打字稿泛型会推断出不同的类型?
- ruby-on-rails - Ruby on Rails 如何添加“require”语句,使其适用于所有模型
- python - 如何将 JSON(来自 python 请求)转换为 pandas 数据框
- android - 如何使用 Intent 从浏览器链接启动应用程序
- angular - 如何在 RxJS 中处理条件 observables