java - java继承对象列表
问题描述
我创建了一个小例子。想象一下我有两个课程:
public class Neuron {
ArrayList<Neuron> neighbours = new ArrayList<>();
int value = 1;
public Neuron() {
}
public void connect(ArrayList<Neuron> directNeighbours) {
for (Neuron node : directNeighbours) {
this.neighbours.add(node);
}
}
}
和一个继承自 Neuron 的类:
public class SpecialNeuron extends Neuron {
int value = 2;
public SpecialNeuron() {
}
}
在我的情况下,我想要继承以避免很多“如果对象是特殊的做某事”的东西。但是,当我打电话时:
public static void main(String[] args) {
ArrayList<Neuron> neurons = new ArrayList<>();
Neuron a = new Neuron();
Neuron b = new Neuron();
Neuron c = new Neuron();
neurons.add(b);
neurons.add(c);
a.connect(neurons);
ArrayList<SpecialNeuron> special = new ArrayList<>();
SpecialNeuron d = new SpecialNeuron();
SpecialNeuron e = new SpecialNeuron();
special.add(d);
special.add(e);
a.connect(special); //Error
}
不能将 List(SpecialNeuron) 用于 List(Neuron) 参数。这个电话有什么问题,有没有解决这个问题的正确方法?此外,我可以做
ArrayList<Neuron> special = new ArrayList<>();
Neuron d = new SpecialNeuron();
Neuron e = new SpecialNeuron();
special.add(d);
special.add(e);
a.connect(special); //works fine
哪个有效,但拒绝使用 SpecialNeuron 类中的函数。
解决方案
您可以在 Generic 中使用 WildCards。您可以在此处<? extends T>
阅读有关它的更多信息。
将您的方法参数更改为此。
public void connect(ArrayList<? extends Neuron> directNeighbours) {
for (Neuron node : directNeighbours) {
this.neighbours.add(node);
}
}
推荐阅读
- java - 替换字符数组中的字符
- javascript - Chart.js AJAX 未捕获类型错误:无法读取未定义的属性“数据”
- android - 在 Android (OpenSSL) 中使用服务器的私钥签署证书
- java - 由于在空对象引用上调用 setText,应用程序崩溃
- ruby-on-rails - Ruby / Rails - 文件命名约定和处理大写模型名称(即 CSV 与 Csv)
- video - VBScript 复制 720p 60fps MP4 文件
- python - 从 JSON Python 中的字典列表中删除重复输出
- python - 如果未从视图 Django REST 框架进行身份验证,则重定向到登录页面
- javascript - 更改 HTML 中另一个类的元素
- c++ - C++ 类中的 VTK Visualizer 不渲染场景