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(这意味着 - 字面意思是任何东西)扩展到您的容器。
我正在创建一个 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(这意味着 - 字面意思是任何东西)扩展到您的容器。