通用抽象 class 构造函数
generic abstract class constructor
我正在尝试在上述 class 的方法中调用通用抽象 class 的构造函数。下面的代码显示了这一点:
public abstract class Node<T> {
public Collection <Node<T>> pars;
public Collection<Node<T>> interactors;
private boolean target = false;
private boolean multiple = false;
private T value;
//constructor for a simple node
public Node(T val){
this.value = val;
}
//constructor for a multiple interaction node
public Node(Collection<Node<T>> inter, T val){
this.interactors = inter;
this.value = val;
if (inter.size()>0){
this.multiple = true;
}
}
public void find_inters(){
ArrayList<Collection<T>> multi_interactions = search();
for (int i = 0; i < multi_interactions.size(); i++){
Node<T> a = new Node<T>(multi_interactions.get(i), this.value); <----i get compile error here
}
}
}
但我一直收到无法实例化 Node 类型的错误。我想在函数 find_inters() 中创建一个新的 Node 对象,但我不能。有人知道 why/possible 解决方案吗?
你说 Node
是抽象的,因为你还不能实现一些方法,但问题是你希望 Node<T> a
是一个 Node
对象,但是当您调用这些方法时,您必须决定 a
将 实际做什么 。
您可以拥有未实现所有方法的 classes -- 这就是 abstract
classes 的工作方式 -- 但您不能拥有 对象 没有实现所有方法,因为该对象可以调用该方法,并且您的程序需要知道要做什么。
你可以写 Node<T> a = new MySubNode<T>(...)
,其中 MySubNode
是 Node
的子 class 并填写了所有方法。或者你可以写 Node<T> a = new Node<T>(...) { implementations of methods go here }
,本质上是一样的,只是实现是匿名的 class。但是你不能实例化一个抽象的 class.
只是为了补充 Louis 的回答。如果 search()
是抽象的,您可以将其更改为 return ArrayList<Node<T>>
,因此实现 类 可以执行类似 Node<T> a = new MySubNode<T>(...)
的操作(除非在某处使用了 search()否则需要 ArrayList<Collection<T>>
).
我正在尝试在上述 class 的方法中调用通用抽象 class 的构造函数。下面的代码显示了这一点:
public abstract class Node<T> {
public Collection <Node<T>> pars;
public Collection<Node<T>> interactors;
private boolean target = false;
private boolean multiple = false;
private T value;
//constructor for a simple node
public Node(T val){
this.value = val;
}
//constructor for a multiple interaction node
public Node(Collection<Node<T>> inter, T val){
this.interactors = inter;
this.value = val;
if (inter.size()>0){
this.multiple = true;
}
}
public void find_inters(){
ArrayList<Collection<T>> multi_interactions = search();
for (int i = 0; i < multi_interactions.size(); i++){
Node<T> a = new Node<T>(multi_interactions.get(i), this.value); <----i get compile error here
}
}
}
但我一直收到无法实例化 Node 类型的错误。我想在函数 find_inters() 中创建一个新的 Node 对象,但我不能。有人知道 why/possible 解决方案吗?
你说 Node
是抽象的,因为你还不能实现一些方法,但问题是你希望 Node<T> a
是一个 Node
对象,但是当您调用这些方法时,您必须决定 a
将 实际做什么 。
您可以拥有未实现所有方法的 classes -- 这就是 abstract
classes 的工作方式 -- 但您不能拥有 对象 没有实现所有方法,因为该对象可以调用该方法,并且您的程序需要知道要做什么。
你可以写 Node<T> a = new MySubNode<T>(...)
,其中 MySubNode
是 Node
的子 class 并填写了所有方法。或者你可以写 Node<T> a = new Node<T>(...) { implementations of methods go here }
,本质上是一样的,只是实现是匿名的 class。但是你不能实例化一个抽象的 class.
只是为了补充 Louis 的回答。如果 search()
是抽象的,您可以将其更改为 return ArrayList<Node<T>>
,因此实现 类 可以执行类似 Node<T> a = new MySubNode<T>(...)
的操作(除非在某处使用了 search()否则需要 ArrayList<Collection<T>>
).