2015-12-29 3 views
5

私はRCPアプリケーション用のプラグインを開発しています。 plugin.xmlの中で、特定のクラスを特定の拡張ポイントに登録する必要があります。 (?):匿名クラスを参照していますか?

package de.me.mypackage; 

import org.something.AnotherClass; 

public class ClassOne { 
    ... 
    public static AnotherClass<ClassOne> getThat() { 
    return new AnotherClass<ClassOne>() { 
     ... 
    }; 
    } 

}

のplugin.xml内AnotherClass<ClassOne>を参照する方法はあり これらのクラスの一つは、次のように定義された匿名クラスですか?

私は既にde.me.mypackage.ClassOne$AnotherClassのようなものを試しましたが、それは動作しません。クラスを参照できるように、そのクラス内のクラスを宣言する必要がありますか?

答えて

2

私の知る限りでは、それは数値インデックス必要があります:コンパイル後

class Bla { 
    public static void main(String[] args) { 
    (new Runnable() { 
     public void run() { 
     System.out.println(getClass().getName()); // prints Bla$1 
     } 
    }).run(); 
    } 
} 

を、あなたが得ますソースファイルが変更されます。 - あなたはそれを参照したい場合それという名前のクラスにする必要があります

public class ClassOne { 

    public static class MyClass extends AnotherClass<ClassOne> { 
    public MyClass(/* arguments you would pass in getThat()? */) { 
     ... 
    } 
    ... 
    } 

    public static AnotherClass<ClassOne> getThat() { 
    return new MyClass(...); 
    } 
} 
+0

ありがとうございます。 @ Vlad:静的な内部クラスを作成すると、私の場合のための最良のソリューションと思われ、それは動作します。私はそのクラスを 'de.me.mypackage.ClassOne $ MyClass'で参照することができました。 – July

0

ドル記号は、クラスのバイナリ名でのみ再生されます。 Javaソースでは、de.me.mypackage.ClassOne.AnotherClass.classを使用してください。あなたはケースにナンバリングに頼ることはできない、と述べた

$ ls *.class 
Bla$1.class Bla.class 

1

私はここに明白なことを言う必要がある:

あなたの代わりのように、static内部クラスを定義することができます。あなたがそれ以外の方法でアクセスできるかどうかは、技術的な好奇心です(私はその答えを知ることはできません)。実際に生産で行うべきではありません。

関連する問題