2010-09-15 28 views
2

我有一些Java代碼,我寫了以下錯誤:;無法實例()在<匿名<any>>以()

internal error; cannot instantiate() at <anonymous <any>> to()

我所做的創建類似的接口java.lang.Comparable,其定義如下:

public interface Comparable<T> 
{ 
    public int compareTo(T o); 
} 

我的接口是:

public interface CustomComparable<T> 
{ 
    public int compare(T a, T b); 
} 

如果我試圖創建一個使用可比的匿名內部類,它的罰款......

public void someThing() 
{ 
    Comparable<Object> o = new Comparable<Object>() 
    { 
     public int compareTo(Object o) 
     { 
      // ... 
     } 
    }; 
} 

用我的界面我得到上述錯誤。爲什麼? java.lang.Comparable專門處理?

public void someThing() 
{ 
    CustomComparable<Object> o = new CustomComparable<Object>() 
    { 
     public int compare(Object a, Object b) 
     { 
      // ... 
     } 
    }; 
} 

我正在使用Java 1.6u21和NetBeans 6.9.1。

+0

你的界面是比較器,不是可比的。 – SLaks 2010-09-15 02:14:59

回答

1

它看起來像你想要使用一個Comparator<T>而不是一個Comparable<T> - 接口已經存在。

+0

謝謝你 - 不知道有一個「Comparator」接口。 ;) – 2010-09-15 02:23:13

+0

是的,當你有一個具有多種排序方式的類時,這非常有用 - 只需爲每種排序方法創建一個Comparator即可。 – 2010-09-15 02:27:29

+0

是的,它和匿名的內部類很好地結合在一起。 – 2010-09-15 02:29:54

1

下面的代碼編譯並沒有錯誤在Java 1.6.0_20-B02運行:

public class Test { 
    public static void main(String[] args) { 
     CustomComparable<Object> o = new CustomComparable<Object>() 
     { 
      public int compare(Object a, Object b) 
      { 
       System.out.println(a); 
       System.out.println(b); 
       return 0; 
      } 
     }; 
     o.compare("a", "b"); 
    } 

    public interface CustomComparable<T> 
    { 
     public int compare(T a, T b); 
    } 
} 

您確認您發佈的代碼代表一個很好的測試案例問題了嗎?

+0

這很令人費解。我重新啓動了NetBeans,現在它不顯示錯誤。也許某處的某個錯誤導致它忘記更新其內部源代碼樹。我認爲它可能沒有意識到我爲Comparator所在的包添加了一個'import'。好的測試用例,謝謝。 :) – 2010-09-15 02:24:42

0

java標準庫類沒有被javac專門處理。 你在javac,congratualations中遇到了一個bug。

+0

這只是NetBeans更新緩存的一個問題。不過,很高興知道。 – 2010-09-15 17:16:54

0

我最近在NetBeans中遇到過同樣的問題,但這些錯誤並不是暫時的。

comboBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { // do stuff } });

注意,他們會被正確編譯,當我使用Ant,但仍NetBeans的標誌他們:「內部錯誤;不能實例化()在以()」等。關於這個錯誤我唯一可以說的另一件事是,匿名類在靜態初始化器內部的兩個其他匿名類內的方法內。

我在使用Java 1.6.0_22和NetBeans 6.9的32位x86 OS X 10.6.6以及所有當前更新。

1

我在NetBeans 6.9.1中也看到了這個(在JDK 1.6_22 fwiw下)。 我有幾個包在netbeans的某些行上顯示錯誤的類,但它們會編譯時沒有錯誤。關閉/重新打開netbeans並沒有解決它,也沒有rebuildAll。 我修正這個問題的方法是去「觸摸」包中的每個文件,將它們標記爲髒,然後重新構建項目,然後它們就會消失。

2

這可能是微不足道的,但我在Netbeans 7.0中遇到同樣的問題。下面的代碼給出了同樣的錯誤:

 JSlider slider1 = new JSlider(JSlider.HORIZONTAL, -100, 100, 0); 
     slider1.addChangeListener(new ChangeListener() { 
      public void stateChanged(ChangeEvent e) { 
       System.out.println("Slider1: " + slider1.getValue()); 
      } 
     }); 

該問題不完全限定ChangeListener。我不得不導入javax.swing.event.ChangeListener。

相關問題