Java - 如何选择泛型类类型 "on-the-go"

标签 java class if-statement generics declaration

我实现了一个泛型类,我想创建一个由用户选择的特定类型的变量。 我希望无论用户选择什么,变量的名称都是相同的。

到目前为止我所得到的:

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/

相关文章:

java - 使用滚动条清屏(Java)

java - 如何在多线程应用程序中获取作业执行持续时间的准确时间戳?

java - 如何在没有 if 语句的情况下做出决定

javascript - 我需要获取一个输入的字符串,取出非数字字符,然后如果该字符串以1开头,则删除1

if-statement - if 和 else if 做同样的事情

java - 如何使用ciexyz/cielab检测肤色?

java - Cobertura 导致 ClassNotFoundException

java - 从另一个类文件访问另一个类文件

javascript - 创建类的函数

c++ - 混合类和函数模板