通用和动态关联类型
Generic and dynamically associated type
可能,我会问的是一个糟糕的问题,因为 JAVA 是强类型语言,但我会问的,可以肯定的。
我想实现几个模型,jackson 将映射到这些模型。
假设我们有一个:
具有 属性 值的 SomeObject。 SomeObject 是一个接口:
interface SomeObject <T> {
T getValue();
}
值可以是布尔值,可以是列表,也可以是简单的字符串。 ObjectOne 和 ObjectTwo 实现 SomeObject
我想知道,如果我们会有这样的对象:
List<SomeObject> someObject = new ArrayList<>();
我们将在该列表中包含:ObjectOne、ObjectTwo,如果有可能在每个对象上调用 getValue,而不将其强制转换为给定 class,获取正确的值?
我知道我可以做这样的事情:
(String) list.get(0).getValue();
但是有没有办法得到这样的结果:
String firstItemIsAString = list.get(0).getValue();
ArrayList secondItemIsAnArrayList = list.get(1).getValue();
我知道这不是 javascript,但也许在 Generics 的帮助下这可能是可以实现的?
我将在 SomeObjects 列表中添加该项目将以这种方式添加:
List<SomeObject> list = new ArrayList<>();
list.add(new ObjectOne<String>());
list.add(new ObjectTwo<ArrayList>());
也许辅助方法可以帮助您假装 Java 类型不安全:
public interface SomeObject <T> {
T getValue();
}
public static void main(String...args){
List<SomeObject<?>> objectList=new ArrayList<SomeObject<?>>();
String firstItemIsAString = converter(objectList.get(0).getValue());
}
public static <t> t converter(Object input){
return (t) input;
}
一旦你将一个布尔值和一个 ArrayList 一起放入一些 Collection,Collection 的通用类型就必须是两者的一些通用类型,这就剩下 Object - 因此您根本没有关于 collection 中类型的信息。
直接回答你的问题:不,没有办法在泛型中保存某些东西的类型,因为它们在运行时消失了。
可能,我会问的是一个糟糕的问题,因为 JAVA 是强类型语言,但我会问的,可以肯定的。
我想实现几个模型,jackson 将映射到这些模型。 假设我们有一个: 具有 属性 值的 SomeObject。 SomeObject 是一个接口:
interface SomeObject <T> {
T getValue();
}
值可以是布尔值,可以是列表,也可以是简单的字符串。 ObjectOne 和 ObjectTwo 实现 SomeObject 我想知道,如果我们会有这样的对象:
List<SomeObject> someObject = new ArrayList<>();
我们将在该列表中包含:ObjectOne、ObjectTwo,如果有可能在每个对象上调用 getValue,而不将其强制转换为给定 class,获取正确的值? 我知道我可以做这样的事情:
(String) list.get(0).getValue();
但是有没有办法得到这样的结果:
String firstItemIsAString = list.get(0).getValue();
ArrayList secondItemIsAnArrayList = list.get(1).getValue();
我知道这不是 javascript,但也许在 Generics 的帮助下这可能是可以实现的? 我将在 SomeObjects 列表中添加该项目将以这种方式添加:
List<SomeObject> list = new ArrayList<>();
list.add(new ObjectOne<String>());
list.add(new ObjectTwo<ArrayList>());
也许辅助方法可以帮助您假装 Java 类型不安全:
public interface SomeObject <T> {
T getValue();
}
public static void main(String...args){
List<SomeObject<?>> objectList=new ArrayList<SomeObject<?>>();
String firstItemIsAString = converter(objectList.get(0).getValue());
}
public static <t> t converter(Object input){
return (t) input;
}
一旦你将一个布尔值和一个 ArrayList 一起放入一些 Collection,Collection 的通用类型就必须是两者的一些通用类型,这就剩下 Object - 因此您根本没有关于 collection 中类型的信息。
直接回答你的问题:不,没有办法在泛型中保存某些东西的类型,因为它们在运行时消失了。