Java如何选择泛型类类型“onthego”
我实现了一个泛型类,我想根据用户的选择创建一个具有特定类型的变量。 我希望无论用户选择什么,变量的名称都是相同的
到目前为止,我得到的是:
public class MyGeneric <T>
{
...
}
主要内容:
if(choice==1)
MyGeneric<Integer> item = new MyGeneric<Integer>();
else
MyGeneric<String> item = new MyGeneric<String>();
我知道if
内的声明是被禁止的
我能做什么
这样做的原因是that
第一个选项更具可读性和“通用性”
# 1 楼答案
不要忘记,在Java中,当使用泛型(https://docs.oracle.com/javase/tutorial/java/generics/erasure.html)时,有一种叫做类型擦除的东西。它们在运行时不可用
实际上,如果您真的想知道
MyGeneric
内的类型,那么必须将MyGeneric
类型存储在MyGeneric
类内。比如:然后影响if中的类型
# 2 楼答案
我猜你想做:
但关键是:当你开始以这种方式使用泛型时。。。你失去了他们所有的优势。泛型的本质是为您提供一定量的类型安全性,可以由编译器强制执行
无论真正使用哪种类型的泛型,你使用“同一项”的想法都与你的意图相矛盾。你也可以忘记使用泛型,只需到处使用Object
换句话说:所使用的具体通用类型是项目“类型”的基本部分。我在这里看到的唯一有效的用例更像:
(您对项目使用某种约束,可以通过不同的方式实现)