Dvi*_*aim 0 java generics if-statement class declaration
我实现了一个泛型类,我想根据用户的选择创建一个具有特定类型的变量.我希望无论用户选择什么,变量的名称都是相同的.
到目前为止我得到了什么:
public class MyGeneric <T>
{
...
}
Run Code Online (Sandbox Code Playgroud)
主要:
if(choice==1)
MyGeneric<Integer> item = new MyGeneric<Integer>();
else
MyGeneric<String> item = new MyGeneric<String>();
Run Code Online (Sandbox Code Playgroud)
我知道内部的声明if是被禁止的.
我能做什么?
之所以这样做,就是那个.
第一个选项更具可读性和"通用"..
我猜你想做:
MyGeneric<?> item;
if (choice == 1) {
item = new MyGeneric<Integer>();
} else {
item = new MyGeneric<String>();
}
Run Code Online (Sandbox Code Playgroud)
但重点是:当你开始以这种方式使用泛型时...你失去了所有优点.泛型的本质是为您提供一定数量的类型安全性,可以由编译器强制执行.
无论使用何种通用类型,您使用"相同项目"的想法与该意图相矛盾.你也可以忘记使用泛型,只需在整个地方使用Object.
换句话说:使用的具体泛型类型是项目"类型"的重要部分.我在这里看到的唯一有效用例更像是:
MyGeneric<? extends Number> item;
if (choice == 1) {
item = new MyGeneric<Integer>();
} else {
item = new MyGeneric<Float>();
}
Run Code Online (Sandbox Code Playgroud)
(对项目使用某种约束,可以用不同的方式实现)
| 归档时间: |
|
| 查看次数: |
292 次 |
| 最近记录: |