我实现了一个泛型类,我想创建一个由用户选择的特定类型的变量。 我希望无论用户选择什么,变量的名称都是相同的。
到目前为止我所得到的:
public class MyGeneric <T>
{
...
}
主要:
if(choice==1)
MyGeneric<Integer> item = new MyGeneric<Integer>();
else
MyGeneric<String> item = new MyGeneric<String>();
我知道 if
中的声明是被禁止的。
我能做什么?
<小时/>这样做的原因是that .
第一个选项更具可读性和“通用性”..
最佳答案
我猜你想做:
MyGeneric<?> item;
if (choice == 1) {
item = new MyGeneric<Integer>();
} else {
item = new MyGeneric<String>();
}
但要点是:当你开始以这种方式使用泛型时......你就失去了它们的所有优势。泛型的本质是为您提供一定程度的类型安全,可以由编译器强制执行。
无论实际使用哪种泛型类型,您都使用“相同项目”的想法与该意图相矛盾。您也可以忘记使用泛型,而只是在各处使用 Object。
换句话说:使用的具体泛型类型是项目“类型”的基本部分。我在这里看到的唯一有效的用例更像是:
MyGeneric<? extends Number> item;
if (choice == 1) {
item = new MyGeneric<Integer>();
} else {
item = new MyGeneric<Float>();
}
(您对项目使用某种约束,可以通过不同的方式实现)
关于Java - 如何选择泛型类类型 "on-the-go",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41549044/