簡體   English   中英

通用抽象類構造函數

[英]generic abstract class constructor

我正在嘗試在所述類的方法內為通用抽象類調用構造函數。 下面的代碼顯示了這一點:

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 } ,除了實現是在匿名類中之外,這基本上是相同的。 但是您不能實例化一個抽象類。

只是為了增加路易斯的答案。 如果search()是抽象的,則可以將其更改為返回ArrayList<Node<T>> ,因此實現類可以執行類似於Node<T> a = new MySubNode<T>(...) (除非search()在需要ArrayList<Collection<T>>其他地方使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM