java - 泛型抽象类构造函数

标签 java generics constructor abstract

我正在尝试在所述类的方法中调用通用抽象类的构造函数。下面的代码显示了这一点:

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 对象,但我不能。有人知道原因/可能的解决方案吗?

最佳答案

你说过Node是抽象的,因为您还无法实现某些方法,但问题是您想要 Node<T> a成为Node对象,但你必须决定什么a当您调用这些方法时,实际上会

您可以拥有未实现所有方法的类 - 这就是abstract类可以工作——但是您不能拥有未实现所有方法的对象,因为该对象可以调用该方法,并且您的程序需要知道要做什么。

你可以写Node<T> a = new MySubNode<T>(...) ,其中MySubNodeNode 的子类填写所有方法。或者您可以写 Node<T> a = new Node<T>(...) { implementations of methods go here } ,本质上是一样的,只是实现是在匿名类中。但你不能实例化抽象类。

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

相关文章:

c++ - 将参数传递给父类(super class)构造函数

java - 为什么 UIComponent 中的 encodeXxx 方法接受 FacesContext 参数?

java - 方法是否抽象

java - 在 java 中实现一个简单的泛型函数时出现编译错误?

c++ - 非参数和复制构造函数

java - 在构造函数中使用 JAXB

java - 实用方法和异常

java - BFS 不知情的搜索问题

generics - 使用泛型获取列表类,例如:List<Number>::class

Java:尝试使用错误类型作为映射键时出现编译器或 Eclipse 警告