2017-10-17 154 views
1

我有以下的第一個通用類及其接口:泛型類實例化一個泛型類

public interface Generic1Interface<E extends Comparable> { 
    .. 
    } 

    public class Generic1 <E extends Comparable> implements 
    Generic1Interface<E> { 
    .. //implementation of Doubly linked list using Node objects 
    } 

而第二個通用類和接口:

public interface Generic2Interface<E extends Comparable> { 
    .. 
    } 

    public class Generic2 <E extends Comparable> implements 
    Generic22Interface<E> { 
     Generic1Interface<E> list; 
     //so nothing here but a reference to an object of type Generic1Interface<E> 
    Generic2() { 
     list = new Generic1(); 
    } 

假設我們正在努力在第二個類中的一個方法上,我們嘗試實例化第二個類的新實例,並將其命名爲「result」,然後嘗試訪問其Generic2實例,它將給出錯誤:

public Generic2Interface<E> union (E a, E b) { 
     Generic2Interface<E> result = new Generic2(); 
     **result.list** = ....; 

result.list將給出錯誤:「列表無法解析或不是字段」。我認爲必須有一個解決方法來在泛型類中實例化泛型類。 謝謝。

編輯:我需要符合每個實現的類中的接口。所以你可以看到方法union必須返回Generic2Interface類型的對象,這就是爲什麼我這樣聲明結果的原因。

+1

是不是投您嘗試訪問在類中定義的字段前GENERIC2必要嗎?截至目前,結果的類型爲Generic2Interface .. – Vasan

+0

如果我正確讀取您的代碼,則嘗試訪問Generic2Interface類型的對象上的列表字段。該字段未在接口上定義,但在Generic2類中定義。 –

+0

@RobObdeijn正確。我忘了提到我這樣做的原因。我必須符合接口,所以我需要處理Generic2類型的實例,但是在這個類的每個方法的末尾,我必須返回對象類型Generic2Interface

回答

1

您需要將結果轉換爲Generic2類型。這工作:

System.out.println(((Generic2)result).list);

或者這樣:

Generic2<E> result = new Generic2(); 
System.err.println(result.list); 
+0

我試過但沒有工作。我實際上嘗試過的是: 'Generic2Interface result = new Generic2();'然後 'result =(Generic2)result;'但仍然無法訪問result.list。 –

+0

這不是我所建議的。 'Set'來自不同的類型層次結構,與Generic2Interface不兼容。您需要使用您定義字段'list'的類型,它只是* Generic2而不是任何其他類型。 – Vasan

+0

我需要符合接口,所以我不能像這樣聲明結果:'Generic2 result = ...' –