java - 通用和动态关联类型

标签 java generics

也许,我会问一个可怕的问题,因为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/

相关文章:

c# - 反射 - 将对象转换到接口(interface)<interface>

generics - 如何结合 std::str::lines 和 std::io::lines?

c# - 通用约束排除

java - 与多个客户端的 ServerSocket 连接

java - 如何使用 SoapUI 测试需要多选复选框的 REST 服务?

java - 存储 Java 应用程序名称和版本属性的最佳方法

java - 将 int[] 传递给采用 T[] 的通用方法

java - Jackson ObjectMapper 在 try catch 中无法访问

java - java中如何在已排序的链表中插入字符串?

java - 为什么在访问级别关键字之后指定通用