java 中泛型 class 中的非泛型构造函数

Non-generic constructor in generic class in java

我正在创建一个 Graph-class 来表示无向图。最后,它将能够读取和解析文件(例如 Newick 或 DOT 格式),因此理想情况下,图中顶点的名称应该是字符串或整数,使用泛型作为一种舒适的解决方案。

class 指定有一个构造函数,该构造函数采用整数作为顶点数,采用双精度作为在任意两个节点之间创建边的概率。然后它应该根据该信息创建一个随机图,在这里我 运行 进入泛型问题。该图用邻接表表示,需要 "forced" 才能将整数作为顶点的名称。在 Java 中的这个泛型 class 中是否可以有一个非泛型构造函数?

一个解决方案是完全跳过泛型,只使用节点的字符串名称,但我有点想知道是否可以这样做!

是的,这是可能的。但我不建议这样做。原因如下:

简答:

MyGeneric mg = new MyGeneric(); 是相同的 MyGeneric<Object> mg = new MyGeneric<>();

长答案:

    ArrayList a = new ArrayList();

    a.add("somestring");
    a.add(15);
    a.add(new ArrayList());
    a.add(new Button());

    for(int i = 0; i < a.size(); i++){
        System.out.println(a.get(i).getClass());
    }

输出:

class java.lang.String

class java.lang.Integer

class java.util.ArrayList

class java.awt.Button

现在你可以放任何东西了。这是因为它自动将类型设置为 Object。为了使用例如class 对象上字符串的方法,您需要先将其转换为字符串。

如果您将数组列表的类型设置为例如字符串 (ArrayList<String> a = new ArrayList<>();),您将不允许放置任何东西,将 Obejct(这意味着 - 字面意思是任何东西)扩展到您的容器。