2013-07-17 145 views
0

我有一個名爲「ConstituentSet」的類。它有一個方法,即輸出將來自「Proposition」類的「getNucleusInConstSet()」。新的類「命題」有另一種方法,即「getProperty()」。我想知道我的「命題核」在「成分集」類中的屬性。但我不知道我該怎麼做。 我寫作如下,但它不起作用。 (ConstituentSet.getNucleusInConstSet()).getProperty())調用獲取不同類的方法

public class ConstituentSet{ 
    // Constructor 
    private Proposition nucleusInConstSet;  

    public Proposition getNucleusInConstSet() {  
     return nucleusInConstSet; 
    } 
} 



public class Proposition{  

    //Constructor  
    private Property property;  

    public Property getProperty() { 
    return this.type; 
    } 
} 
+0

當你這樣稱呼時會發生什麼?你有什麼錯誤嗎? –

+4

問題:爲什麼getProperty返回this.type而不是this.propperty? – Luis

+0

我得到這個錯誤:「無法對類型ConstituentSet」 – user2583693

回答

4

您有:

(ConstituentSet.getNucleusInConstSet()).getProperty() 

但你需要調用ConstituentSet

實例如

ConstituentSet cs = new ConstituentSet(); 
cs.getNucleusInConstSet().getProperty(); 

請注意,這個成語(鏈式方法調用)可能是一個痛苦。如果您的某個方法返回爲null,則很難理解它是哪一個(不使用調試器)。還要注意的是形式a().b().c().d()的調用是打破封裝的微妙形式(a表明,它有一個b,揭示它有一個c等),如果你輸入((ConstituentSet.getNucleusInConstSet()).getProperty())您試圖調用靜態方法

+0

非靜態方法getNucleusInConstSet()進行靜態引用感謝您的回答 – user2583693

3

ConstituentSet

您需要實例化它,然後調用該對象。

ConstituentSet anInstanceOf = new ConstituentSet(); 
    anInstanceOf.getNucleusInConstSet()).getProperty()); 
+1

此外,不要忘記在調用''nucleusInConstSet''之前將值設置爲' getProperty()'或者你會得到一個NullPointerException – jalynn2

+0

非常感謝你的回答 – user2583693

2

這是行不通的:

ConstituentSet.getNucleusInConstSet().getProperty(); 

因爲getNucleusInConstSet()方法也不是一成不變的。你必須使用一個實例ConstituentSet,這樣的事情:

ConstituentSet cs = new ConstituentSet(); 
cs.getNucleusInConstSet().getProperty(); 

當然,你必須確保nucleusInConstSet不爲空,否則你會得到一個NullPointerException。在ConstituentSet的構造函數中初始化其值,或使用setNucleusInConstSet()進行設置。

或者,您可以使getNucleusInConstSet()爲靜態,但我認爲這不是正確的做法(但我們沒有足夠的關於此問題的信息)。

相關問題