我现在只是为了好玩而喜欢用java。
假设我想将一个对象添加到集合中;无论集合类型如何。通过使用泛型和 T 扩展集合,这将很容易。但是,现在假设我还想通过创建一个新集合来处理我的集合为空的情况;但我希望返回的集合是调用方法想要的类型。所以是这样的:
public <T extends Collection<MyObject> addToCollection (Myobject object, T collection){
if(collection==null)
collection=new T();
collection.add(object);
return collection;
}
显然我不能调用 new T(),但是有没有一种等效的方法呢?通过反射我可以做到,但反射假设我知道 T 类是什么,如果集合为空,我不能只调用“collection.getClass()”我的直觉是这是不可能的,因为编译器无法推断类型; 只是它似乎在理论上应该是可行的
如果我有一个方法可以说类似
HashSet<MyObject> set=addToCollection(object, null);
我可以在运行时看到,当我调用这个集合时,我期望返回一个 HashSet,因此理论上我可以告诉方法它期望 T 是什么类型,因此我的方法现在将创建什么集合。我强烈怀疑 Java 不会这样做。但如果不是,那么就是不实现此功能的原因,因为它太极端了,Sun/Oracle 不会费心编写解决它的方法;还是编译器和运行时交互的方式有什么使这变得不可能或极其困难?