也许,我会问一个可怕的问题,因为JAVA是强类型语言,但我肯定会问它。
我想实现几个模型, jackson 将映射到这些模型。 假设我们有一个: SomeObject 具有属性值。 SomeObject 是一个接口(interface):
interface SomeObject <T> {
T getValue();
}
值可以是 boolean 值,可以是列表,也可以是简单的字符串。 ObjectOne 和 ObjectTwo 实现 SomeObject 我想知道,我们是否会有这样的对象:
List<SomeObject> someObject = new ArrayList<>();
我们将在该列表中包含:ObjectOne、ObjectTwo,如果有可能对每个对象调用 getValue,并且无需将其转换为给定的类,即可获得正确的值? 我知道我可以做这样的事情:
(String) list.get(0).getValue();
但是有没有办法获得这样的结果:
String firstItemIsAString = list.get(0).getValue();
ArrayList secondItemIsAnArrayList = list.get(1).getValue();
我知道这不是 JavaScript,但也许在泛型的帮助下这可能是可以实现的? 我将在 SomeObjects 列表中添加该项目,将以这种方式添加:
List<SomeObject> list = new ArrayList<>();
list.add(new ObjectOne<String>());
list.add(new ObjectTwo<ArrayList>());
最佳答案
一旦你将 Boolean 和 ArrayList 一起放入某个 Collection 中,Collection 的泛型类型就必须是两者的共同类型,这只会留下 Object - 因此你没有关于集合中类型的信息完全没有。
直接回答你的问题:不,没有办法在泛型中保存某些类型,因为这些类型在运行时就消失了。
关于java - 通用和动态关联类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29423433/