ポリモーフィック コンストラクターを宣言する方法はありますか? (過負荷にならないようにしてください!)。
1 つのクラスと 1 つのインターフェイスのインスタンスである引数を指定したいのですが、これらの両方で新しいクラスを作成したくありません (クラスはインターフェイスを実装します)。
コンストラクターを宣言したいのですが、通常は次の構文を使用します。
class Clas {
public Clas(Object obj) { ... }
}
しかし、これらの引数「obj」は Class1 と Interface2 のインスタンスであり、次のように想像します。
class CubeRotationThread {
public CubeRotationThread(Cube c implements IRotable) {...}
//...or...
public CubeRotationThread(Cube c instanceof IRotable) {...}
}
...または、この引数に対してのみポリモーフィックを指定するその他の構文。クラスを作成したくありません: CubeRot extends Cube implement IRotable, すべてのキューブがこれらの機能を持っているわけではないからです. また、(Cube) CubeRot をキャストするという他のオプションは必要ありません。逆に、すべてのキューブを回転可能にします。おそらく IRotator は、キューブまたは他のクラスに実装することも、実装しないこともできます。
コンストラクターでチェックを使用したくありません。
if (obj instanceof Class) { myMethod(); }
新しいクラスを作りたくない
class CubeRotatorThread extends Cube implements IRotator {
}
...すべてのキューブが回転できるわけではなく、キューブだけが回転を実装しているわけではないためです。
ジェネリック クラスを使用したくない:
class CubeRotatorThread T extends Cube implements IRotator {
}
... T はクラスであり、オブジェクト/引数が必要なためです。
そして、私も作成したくありませんNotImplementsRotationException
!投げ用。
多態的な引数が欲しい、本当の多態的なメソッドが欲しい
出来ますか?検索しましたが、コンストラクターでこれを行うための構文が見つかりませんでした。
他の言語 (おそらく C# または C++) の別のコード、ヘルプ ドキュメント、または定義ドキュメントで次のように見ました。
Constructor(Class1 (Class2) args);
これは私にとって奇妙です。そして、これが私が望んでいることかどうかはわかりません。
ポリモーフィック コンストラクターが存在しない場合は、Oracle が作成する必要があると思います。とても便利です。
class CubeRotationThread {
public CubeRotationThread(Cube arg implements IRotator) {}
public CubeRotationThread(Cube arg extends IRotator) {}
public CubeRotationThread(Cube arg instanceof IRotator) {}
}