0

私はファクトリ パターンの研究開発を行っていましたが、以下のコードを開発しました。サブクラスが Dog と Cat であることはわかっていますが、クラス名をメインに渡すことでリフレクションを通じて同じことを達成したい場合はどうすればよいか教えてください。ジャワ

    public abstract class Animal {
    public abstract String makeSound();
}

public class Dog extends Animal {

    @Override
    public String makeSound() {
        return "Woof";
    }

}

public class Cat extends Animal {

    @Override
    public String makeSound() {
        return "Meow";
    }

}

public class AnimalFactory {

    public Animal getAnimal(String type) {
        if ("canine".equals(type)) {
            return new Dog();
        } else {
            return new Cat();
        }
    }

}

public class Main {

    public static void main(String[] args) {
        AnimalFactory animalFactory = new AnimalFactory();

        Animal a1 = animalFactory.getAnimal("feline");
        System.out.println("a1 sound: " + a1.makeSound());

        Animal a2 = animalFactory.getAnimal("canine");
        System.out.println("a2 sound: " + a2.makeSound());
    }

}

タイプを決定する必要さえないように、リフレクション機能を追加する方法を教えてください。メインのJavaにクラス名を渡すだけで、そのサブクラスのオブジェクトが作成されます

4

1 に答える 1

2

これが機能するためには、クラスCatDogクラスがパッケージ内の独自のファイルにあり、your.packageデフォルトのコンストラクターを持っている必要があります。

public class AnimalFactory {
    public Animal getAnimal(String type) {
        return (Animal) Class.forName("your.package." + type).newInstance();
    }
}
于 2012-05-02T17:20:09.693 に答える