2012-04-29 16 views
5

GroovyコードからJava抽象クラスをインスタンス化しようとしています。 (非関連の処理はクラスから取り除かれる)次のJava抽象クラスを考える:Groovyクロージャを使用してコンストラクタパラメータを使用してJava抽象クラスをインスタンス化する方法

public abstract class StackOverflow{ 
    public abstract String answerMe(); 
} 

私は簡単にGroovyでこのようにそれをインスタンス化することができ、かつanswerMe()への呼び出しが正しい出力をトリガします:

StackOverflow stack = [answerMe : { "Answer" }] as StackOverflow 
私は本当にない自演

public abstract class StackOverflowStr{ 
    public StackOverflowStr(String s){} 
    public abstract String answerMe(); 
} 

は今、私はこのようなコンストラクタで文字列パラメータを追加StackOverflowクラスを変更した場合どのように私のオブジェクトをインスタンス化するw、私は多くのことを試みたが、私は正しい構文を見つけることができないようだ、誰か手がかりを持っていますか?

答えて

2

あなたは、古典的なJavaのスタイルでそれをインスタンス化することができます:ちょうどレコードの

StackOverflowStr stack = new StackOverflowStr("javaish"){ 
    String answerMe() {"answer"} 
} 
+0

私はこのようにしましたが、私は最初の例のようにクロージャーでできるかどうか疑問に思っていました。 –

+0

@CedricGatayいいえ、デフォルトのコンストラクタがない場合、Andreaの言うことをせずにプロキシオブジェクトを作成することはできません –

3

、および文言上明確にする:これらのシナリオのすべてで、あなたは抽象クラスをインスタンス化していません。

抽象クラスは、決してインスタンス化できないクラスです。

抽象クラスを継承する具体的な匿名クラスをインスタンス化しています。 B-)

関連する問題