Java - 如何"随时随地"选择泛型类

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是被禁止的.

我能做什么?


之所以这样做,就是那个.

第一个选项更具可读性和"通用"..

Gho*_*ica 5

我猜你想做:

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)

(对项目使用某种约束,可以用不同的方式实现)