2012-02-08 7 views
0

の取得私はNamable奇妙java.lang.NoSuchMethodErrorのエラー

と呼ばれるインターフェースを持っている
public interface Namable { public String getName(); public void setName(String name); }; 

いくつかのクラスは、これを実装します。

私はこのようなコードを作るとき:

Namable foo = new X(); foo.getName();

(Xが実装するクラスである)

を私はエラーを取得:

java.lang.NoSuchMethodError: Namable.getName()Ljava/lang/String;

これはに非常に奇妙です私と私はなぜこれが起こっているのだろう、任意の考えですか?

コンパイル可能例:

Namableクラス:

public interface Namable 
    { 
    public String getName(); 
    } 

拡張クラスX:

public class X extends java.util.ArrayList implements Namable 
{ 
    private String name; 
    public X() 
    { 
    this.name = "bar"; 
    } 
    public String getName() 
    { 
    return name; 
    } 
} 

テストクラス:

public class Test 
{ 
    public static void main() 
    { 
    Namable foo = new X(); 
    foo.getName(); 
    } 
} 

これを実行した後、私は同じ取得エラー。私はあなたが呼び出す必要がBlueJの

+0

'Namable foo = X()'に 'new'がないか、または静的ファクトリメソッドで' X'ですか?プロキシクラスでエキゾチックなことをしていますか?プロキシクラスを使用するDIフレームワークやテストスタブリングフレームワークのようなエキゾチックなフレームワークを使用していますか? –

+1

この問題の詳細なコード(および正しいコード)を入力してください。私はあなたが問題を正確に説明するには短すぎると思う。 –

+0

さて、コードに "新しい"があり、Xは単なるクラスです(XもまたArrayListを拡張していますが、これはその一部でもかまいません)。私は何もしていません...実際には、私は文脈からこの問題を取り除き、上記のようにデバッグしようとしましたが、それでも同じエラーが出ています。 – Alan

答えて

3

私はあなたがここに与えていると予想されるようにmainメソッドがに変更されると、それが動作するクラスで例を実行している:

しかし、あなたはBlueJのを使用しているとして、これは問題ではないかもしれません( BlueJはクラスを実行する特別なメカニズムを使用しています)。

クラスパスに別のクラスNameableがありますか?パッケージのインポートを確認し、定義したインターフェースであることを確認してください。エラーはあなたの環境であり、コードではないようです。

+0

これはやっているようです。コードはそれとは何の関係もなく、これらを微調整すると問題はなくなりました。ありがとう! – Alan

2

を使用しています

foo.getName() 

ない

X.getName() 

あなたが存在していないクラス(静的)メソッドを呼び出すようにしようとしています。

そして、それはNamable foo = new X();であるべきです - あなたのサンプルコードは、示されているようにコンパイルするべきではありません。

SSCCEを提供できますか?

次の修正とSSCCEの更新: BlueJは既にNamableを定義していますか、代わりに別のパッケージにNamableを持っていますか?上記の例では、Namableの名前をNamable2に変更するとどうなりますか?

+0

ああああああ、私はそのインスタンス名でメソッドを呼び出すのは申し訳ありません。 – Alan

0

あなたのポストは私の推測では、多分あなたは、main関数に

public static void main(String args[]) 

ない

public void main(String args[]) 
「を static」キーワードを見逃している可能性があることになり、より良いSSCCE

となりDNAで述べたように

クラスパスの問題かもしれません...ファイル名とクラスの不一致。または、他の何か。

+0

問題はクラスパスまたは名前の不一致の問題です。修正するためにはどうすればよいですか。私はこのようなことに遭遇したことはありません – Alan

0

私はあなたのコードスニペットを実行したときに、示されたエラーが

Error: Main method not found in class Test, please define the main method as: public static void main(String[] args)

ですが、私はあなたの特定のコードスニペットで

java.lang.NoSuchMethodError: Namable.getName()Ljava/lang/String;

を取得していない午前

にごmain方法を変更

+0

これはBlueJの問題だと思っています...コードスニペットをテストする全く新しいプロジェクトを作成し、同じエラーが発生しました – Alan