我正在创建一个Graph类来表示无向图。最后,它将能够从文件中读取和解析(例如Newick或DOT格式),因此理想情况下,图形中的顶点名称应为字符串或整数,并使用泛型作为舒适的解决方案。
指定该类具有一个构造函数,该构造函数将整数作为顶点数目,将整数作为在任意两个节点之间创建边的概率。然后它应该根据该信息创建一个随机图,在这里我遇到了泛型问题。图用邻接表表示,需要“强制”以整数作为顶点的名称。 Java的该泛型类中可能有一个非泛型构造函数吗?
一种解决方案是完全跳过泛型,仅查找节点的字符串名称,但是我对是否可以这样做感到有点兴趣!
答案 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的内容(实际上就是任何内容)扩展到您的容器中。