gpt4 book ai didi

java - 通用数据类型数组创建,其中类型是内部类

转载 作者:行者123 更新时间:2023-12-02 02:08:09 31 4
gpt4 key购买 nike

我有一个类 Table,它是用泛型类型 K 和 V 声明的。它们用作内部类 Node 的参数的数据类型,我正在尝试创建其实际的数组。 Table类相关代码如下:

public class Table<K extends Comparable<K>, V> implements ITable<K,V> {
private int numberOfElements;
private boolean sorted;
private Node[] list;

//inner class
private class Node{
K key;
V value;
public Node(K key, V value) {
this.key = key;
this.value = value;
}
}

//constructor
public Table(Class<Node> c){
this.numberOfElements = 0;
sorted = false;
list = (Node[])Array.newInstance(c,1000);
this.list = list;
}

但是,在其他地方的实际代码中,我尝试使用具体数据类型调用 Table 的构造函数(City 是我自己的带有 int 和 String 参数的类),如下所示:

 Table<Integer,City> table = new Table<Integer,City>(city.getClass());

我收到错误:Class<CAP#1> cannot be converted into class <Table<Integer,City>.Node> CAP#1 extends City from capture of ? extends City

我假设这与 Node 是 Table 类声明中不存在的 Table 内部类有关,但这个问题的实际解决方案让我困惑,因为我不知道如何处理通用数据类型数组。是的,它必须是一个数组,它写在练习描述中。

编辑:添加 City 类。这是一个只有两个参数的简单类。

public class City {
public String name;
public int ID;

public City(String name, int iD) {
this.name = name;
this.ID = iD;
}

public String getName() {
return name;
}

public int getiD() {
return ID;
}

public void setName(String name) {
this.name = name;
}

public void setiD(int iD) {
this.ID = iD;
}
}

我打算让节点基本上包含 City 的实例作为值,并将实例的 ID 作为键,以便轻松地提取它进行搜索。我已经使用自定义数据结构进行了此练习,因此我知道该方法有效,但我无法正确声明通用数据类型数组

最佳答案

您不需要使用Array.newInstance ,由于组件类型是静态已知的,因此它是 Node 。在构造函数中,你不能这样做:

this.list = new Node[1000];

因为这隐式使用 Table<K, V>.Node ,这是通用的,您无法创建通用数组。但您可以使用以下方法强制它成为原始类型:

this.list = new Table.Node[1000];

然后删除 Class<Node>来自构造函数的参数,您可以这样调用它:

Table<Integer, City> table = new Table<>();

从原始数组类型转换为通用数组类型时,您将收到未经检查的警告(如注释中 newacct 所解释),您可以安全地抑制该警告。

关于java - 通用数据类型数组创建,其中类型是内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50428975/

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