gpt4 book ai didi

java - java中泛型类中的非泛型构造函数

转载 作者:行者123 更新时间:2023-12-02 01:30:12 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

简短回答:

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 (这意味着 - 字面上的任何东西)扩展到您的容器。

关于java - java中泛型类中的非泛型构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56208065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com