私は、インターフェイスを実装するユーザーを強制的に探し出す方法や、いくつかのコンストラクタを作成するクラスを拡張しようとしています。抽象クラスで抽象コンストラクタを作成する方法があると思っていましたが、私はそれができないと考えました。Java抽象クラス、抽象コンストラクタ
どうすればこの問題を解決できますか?ユーザーに特定のコンストラクタを作成させるいくつかの方法がありますか?
ありがとうございます!
私は、インターフェイスを実装するユーザーを強制的に探し出す方法や、いくつかのコンストラクタを作成するクラスを拡張しようとしています。抽象クラスで抽象コンストラクタを作成する方法があると思っていましたが、私はそれができないと考えました。Java抽象クラス、抽象コンストラクタ
どうすればこの問題を解決できますか?ユーザーに特定のコンストラクタを作成させるいくつかの方法がありますか?
ありがとうございます!
No. しかし、コンストラクタはしばしばファクトリメソッドで置き換えられるため、抽象ファクトリメソッドやビルダーパターンのような他のパターンを実装できます。
ファクトリメソッドはここでは良い提案です。 – vikingsteve
いいえありません。
反映を利用するユニットテストフレームワークを構築して、正しいコンストラクタが存在することを確認することができます。
ありがとう、私は、クラスによって実装されたインターフェイスにnewInstanceという名前のメソッドを実装する方がよいでしょう。 – yonutix
あなたはabstract
コンストラクタを作成しますが、ここであなたが行うことができます回避策だことはできません。
は、ユーザーが実装するすべてのコンストラクタでabstract
クラスを実装します。それぞれに、このクラスのabstract
メソッドを参照する1つのステートメントがあります。実装はサブクラスにあります。このようにして、抽象メソッドの実装を介して、本体をコンストラクターに提供するようにユーザーを強制します。たとえば、次のように実装で
public abstract class MyAbstractClass {
public MyAbstractClass(int param) {
method1(param);
}
public MyAbstractClass(int param, int anotherParam) {
method2(param, anotherParam);
}
protected abstract void method1(int param);
protected abstract void method2(int param, int anotherParam);
}
、あなたはは、2つのコンストラクタの遺体を表すことができ、これらの2つのメソッドの実装を提供するを余儀なくされます:
public class MyClass extends MyAbstractClass {
public MyClass(int param) {
super(param);
}
public MyClass(int param, int anotherParam) {
super(param, anotherParam);
}
public void method1(int param) {
//do something with the parameter
}
public void method2(int param, int anotherParam) {
//do something with the parameters
}
}
何コンストラクタあなたが実現したいですか(なぜ)? – ErstwhileIII
空のコンストラクタとコピーコンストラクタです。しかし、私は一般的な目的のために知りたいので、私は質問を入れます。 – yonutix