Java泛型类中的非泛型构造函数

时间:2019-05-19 12:58:21

标签: java generics graph-theory

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

指定该类具有一个构造函数,该构造函数将整数作为顶点数目,将整数作为在任意两个节点之间创建边的概率。然后它应该根据该信息创建一个随机图,在这里我遇到了泛型问题。图用邻接表表示,需要“强制”以整数作为顶点的名称。 Java的该泛型类中可能有一个非泛型构造函数吗?

一种解决方案是完全跳过泛型,仅查找节点的字符串名称,但是我对是否可以这样做感到有点兴趣!

1 个答案:

答案 0 :(得分:2)

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

简短答案:

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

输出:

java.lang.String类

java.lang.Integer类

java.util.ArrayList类

java.awt.Button类

现在您可以放任何东西了。这是因为它将类型自动设置为Object。为了使用例如您需要先将对象强制转换为String的String类的方法。

如果您将数组列表的类型设置为例如字符串(ArrayList<String> a = new ArrayList<>();),将不允许您将任何扩展Obejct的内容(实际上就是任何内容)扩展到您的容器中。