私は、異なる動物型がAnimalインタフェースと同じtalk()メソッドを実装するという問題に取り組んでいます。
getAnimal()
メソッドを見ると、新しい種類の動物がプログラムに追加されたときに、そのメソッドの内部も変更する必要があることがわかります。
既存のクラスで何も変更せずにAnimalをサブクラス化するだけで、新しい動物を追加したいと考えています。
たとえば、動物「Dog」を追加すると、criteria = "loyal"となります。 talk = "woof"
どうすれば可能か教えてください。以下は私のコードですJavaで動的クラスを作成する
interface Animal {
public void talk();
}
class Lion implements Animal {
@Override
public void talk() {
System.out.println("ROARRRRR");
}
}
class Mouse implements Animal {
@Override
public void talk() {
System.out.println("SQUEEEEEAK");
}
}
class Bison implements Animal {
@Override
public void talk() {
System.out.println("BELLOWWWWW");
}
}
class AnimalType {
public static Animal getAnimal(String criteria) {
// I refactor this method
if (criteria.equals("small")) {
return new Mouse();
} else if (criteria.equals("big")) {
return new Bison();
} else if (criteria.equals("lazy")) {
return new Lion();
}
return null;
}
}
public class AnimalExamples {
public static void main(String[] args) {
AnimalType.getAnimal("small").talk();
AnimalType.getAnimal("big").talk();
AnimalType.getAnimal("lazy").talk();
// how to add an animal "Dog" here, criteria="loyal"; talk="woof"
AnimalType.getAnimal("loyal").talk();
try {
AnimalType.getAnimal("small").talk();
} catch (Exception ex) {
System.out.println("Animal does not exists");
}
}
}
私はGoogleで検索しましたが、それは反映されていることがわかりました。しかし、どのように知りません。可能であれば、これで私を助けてくれますか?前もって感謝します!
あなたはおそらく「匿名の内部クラス」を探しています –
あなたの問題は、リフレクションを必要とするとは思われませんが、Javaでは標準のOOPであると思います。 –
'if(criteria.equals(" Scary ")){ 新しいWombat()を返します。 } ' –