2009-06-02 50 views
0
public class StateQueryFilter extends FieldQueryFilter { 
    // private static final Log LOG = LogFactory.getLog(RecommendedParser.class.getName()); 

    public StateQueryFilter() { 
     super("state", 5f); 
     super("city", 5f); 
     super("notdirectory", 5f); 
     //LOG.info("Added a state query"); 
    } 

} 

,並上報:在java中構造問題

Constructor call must be the first statement in a constructor 

有沒有一種方法,使工作?

+0

你試圖完成什麼? – jdigital 2009-06-02 17:36:37

+0

提升字段:「狀態」,「城市」,「非目錄」 – omg 2009-06-02 17:57:03

+0

我認爲如果可能的話,你將不得不使用多個過濾器。即使編寫了這些代碼,它仍然只會提升「不是目錄」而不是「國家」或「城市」。 – 2009-06-02 18:15:45

回答

7

您只能在構造函數中調用super一次,它必須是第一行。

甚至沒有必要像你一樣多次調用它。調用super不會創建新對象;它只是讓超類初始化它的字段。你真的試圖不止一次地初始化相同的字段嗎?您可能正在嘗試創建三個單獨的對象,但這不是實現它的方法。在Java教程中參見Using the keyword super

+0

這是我nutch0.9中的一個代碼,用於工作。 – omg 2009-06-02 17:35:46

+1

它沒有辦法工作,除非他們在幾個版本之前改變了規則。 – 2009-06-02 17:37:29

2

沒有。你試圖構建對象3次,邏輯是有缺陷的。

2

我覺得構造函數調用setter醜陋。

另一個選擇是有一個構造函數,它接受參數。

public StateQueryFilter() { 
    super(/*state*/ 5, /* city */ 5, /*notdirectory*/ 5); 
    //LOG.info("Added a state query"); 
} 

但是它看起來像你應該做這樣

public class StateQueryFilter extends FieldQueryFilter { 
    private final String city; 
    private final String state; 
    private final boolean noDirectory; 

    public StateQueryFilter(String city, String state, boolean noDirectory) { 
     this.state = state; 
     this.city = city; 
     this.notDirectory = notDirectory; 
    } 
} 
// later 
FieldQueryFilter filter = new StateQueryFiler("Los Angeles", "California", true); 

BTW一句:請不要使用浮點值,他們幾乎都不是最好的選擇。