有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java如何选择泛型类类型“onthego”

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

到目前为止,我得到的是:

public class MyGeneric <T>
{
...
}

主要内容:

if(choice==1)
     MyGeneric<Integer> item = new MyGeneric<Integer>();
else
     MyGeneric<String> item = new MyGeneric<String>();

我知道if内的声明是被禁止的

我能做什么


这样做的原因是that

第一个选项更具可读性和“通用性”


共 (2) 个答案

  1. # 1 楼答案

    不要忘记,在Java中,当使用泛型(https://docs.oracle.com/javase/tutorial/java/generics/erasure.html)时,有一种叫做类型擦除的东西。它们在运行时不可用

    实际上,如果您真的想知道MyGeneric内的类型,那么必须将MyGeneric类型存储在MyGeneric类内。比如:

    class MyGeneric{
    private Class type; // (as an instance variable of MyGeneric). 
    }
    

    然后影响if中的类型

  2. # 2 楼答案

    我猜你想做:

    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>();
    }
    

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