2016-10-28 7 views
-1

が、私はこのようになりますJavaクラスを持っている拡張しますか?そのようなインスタンス化の背後にあるJavaのコンストラクタは、キーワード

thisThing theThing = new thisThing(ClassForThisThing.class); 

アイデアを次のように

class ClassForThisThing implements anInterface { 
    ... // interface methods go here 
} 

は今、あなたはthisThingをインスタンス化することができます:あなたが最初anInterfaceを実装するクラスを定義する必要がありthisThingのコンストラクタを呼び出すために

+0

)私はあなたの質問を理解できないかもしれないが、あなたは、単に(新しいthisThingを呼び出す必要はありませんし、 anInterfaceを実装する任意のオブジェクトを引数として渡しますか? – facundop

+1

Javaコーディング標準を学んでください:ThisThingでなければなりません – duffymo

+1

あなたはちょうどインターフェイスを実装しているクラスを渡します... – Li357

答えて

3

リフレクションによってanInterfaceのインスタンスを作成できるクラスを通常thisThingとしています。コンパイラは、それが常に実行時に成功するでしょう。この

anInterface memberInstance = (anInterface)member.newInstance(); 

のようにキャストを確認して、あなたは、コンストラクタに渡すクラスがanInterfaceと互換性があることを確認します。

1

あなたのやりたいことは嫌いです。

これはなぜですか?ここにジェネリック医薬品は必要ありません。あなたは今作曲しています。 AnInterfaceを実装する参照を渡します。 Liskov置換原則は、すべてがうまくいくと言います。

public class ThisThing { 

    private AnInterface member; 

    public ThisThing(AnInterface member) { 
     this.member = member; 
    } 
} 

はここインターフェースです:ここで

public interface AnInterface { 
    void doSomething(); 
} 

は実装です:

public class Demo implements AnInterface { 
    public void doSomething() { System.out.println("Did it"); } 
} 
+0

ポイントは、それが行われていない、 – NWS

+0

あなたは何もしていませんか?インターフェイスを実装しますか? – duffymo

+0

これが定義されています。そのまま供給されます。 – NWS

関連する問題