2013-06-06 42 views
1

爲什麼以下代碼段不起作用?無法將新方法添加到內部類

import java.util.Comparator; 


public class TestInner { 


public static void main(String[] args) { 

    Comparator<String> comp = new Comparator<String>(){ 

     private String sample = null; 
     @Override 
     public int compare(String arg0, String arg1) { 
      // TODO Auto-generated method stub 
      return arg0.compareTo(arg1); 
     } 

     public void setText(String t1){ 
      sample = t1; 
     } 

    }; 
    // compiler error - Method is undefined for the type Comparator<String> 
    comp.setText("xyz"); 

} 

} 

我在示例代碼中使用了比較器。任何對象的Comparator都是如此。

我創建了一個實現了Comparator接口的內部類,爲什麼現在允許我在這裏添加新的方法?

回答

4

不允許的原因是因爲您的=的左側有一個Comparator,並且Comparator沒有setText方法。要解決這個問題,您必須使用setText方法命名一個類,並在左側使用該命名類。例如,該代碼將編譯:

package com.sandbox; 

import java.util.Comparator; 

public class Sandbox { 

    public static void main(String[] args) { 

     MyComparator comp = new MyComparator(); 
     // compiler error - Method is undefined for the type Comparator<String> 
     comp.setText("xyz"); 

    } 

    private static class MyComparator implements Comparator<String> { 

     private String sample = null; 

     @Override 
     public int compare(String arg0, String arg1) { 
      // TODO Auto-generated method stub 
      return arg0.compareTo(arg1); 
     } 

     public void setText(String t1) { 
      sample = t1; 
     }  
    }   
} 

注意,該代碼仍然將無法編譯,因爲你沒有把MyComparator在左側:

package com.sandbox; 

import java.util.Comparator; 

public class Sandbox { 

    public static void main(String[] args) { 

     Comparator comp = new MyComparator(); 
     // compiler error - Method is undefined for the type Comparator<String> 
     comp.setText("xyz"); 

    } 

    private static class MyComparator implements Comparator<String> { 

     private String sample = null; 

     @Override 
     public int compare(String arg0, String arg1) { 
      // TODO Auto-generated method stub 
      return arg0.compareTo(arg1); 
     } 

     public void setText(String t1) { 
      sample = t1; 
     } 

    } 


} 
+1

謝謝,這幫了很大的忙! –

0

當您創建一個內部類,它沒有可以直接使用的類型。

您正在將您的內部類分配給類型爲Comparator的變量,因此,當您引用該變量時,只能訪問Comparator類型定義的方法。

如果你想在外部使用其他方法,你應該創建一個單獨的類implements Comparator

0

Comparator接口沒有setText()方法。您已聲明變量的類型爲Comparator,而不是某些客戶類別,因此您可能調用的唯一方法是那些屬於Comparator

0

因爲比較器沒有聲明setText()方法並且您試圖調用方法使用比較器參考變量。