gpt4 book ai didi

java - Java 中的动态泛型类型

转载 作者:行者123 更新时间:2023-12-01 18:42:46 25 4
gpt4 key购买 nike

如果我有一个使用泛型类型的类,例如

public class Record<T> {
private T value;

public Record(T value) {
this.value = value;
}
}

如果我知道使用的所有类型(例如本例中的情况),那么在设计时键入所有内容都是非常简单的:

// I type explicitly
String myStr = "A";
Integer myInt = 1;
ArrayList myList = new ArrayList();

Record rec1 = new Record<String>(myStr);
Record rec2 = new Record<Integer>(myInt);
Record rec3 = new Record<ArrayList>(myList);

如果我从“某个地方”获取了一个我不知道类型的对象列表,会发生什么?如何分配类型:

// now let's assume that my values come from a list where I only know during runtime what type they have

ArrayList<Object> myObjectList = new ArrayList<Object>();
myObjectList.add(myStr);
myObjectList.add(myInt);
myObjectList.add(myList);

Object object = myObjectList.get(0);

// this fails - how do I do that?
new Record<object.getClass()>(object);

最佳答案

Java 泛型不是 C++ 模板。

Java 泛型是编译时功能,而不是运行时功能。

这里是 Java generics Tutorial 的链接.

这永远不能与 Java 一起使用:

new Record<object.getClass()>(object);

您必须使用多态性(例如,每个对象实现一个已知接口(interface))或 RTTI(instanceof 或 Class.isAssignableFrom())。

你可以这样做:

     class Record
{
public Record(String blah) { ... }
public Record(Integer blah) { ... }
... other constructors.
}

或者您可以使用 Builder pattern .

关于java - Java 中的动态泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59890497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com