나는 빈을 확장 여러 개체했습니다 :특정 클래스를 기반으로 특정 구현을 인스턴스화하는 방법은 무엇입니까?
public class Fruit {}
public class Banana extends Fruit {}
public class Pear extends Fruit {}
을 그리고 다른 구현, 각 빈에 대한 하나의 인터페이스를했습니다.
public interface Milkshake {
public String doMilkshake();
}
public class FruitMilkshake implements Milkshake {
public String doMilkshake() {
return "Fruit Milkshake!";
}
}
public class BananaMilkshake implements Milkshake {
public String doMilkshake() {
return "Banana Milkshake!";
}
}
public class PearMilkshake implements Milkshake {
public String doMilkshake() {
return "Pear Milkshake!";
}
}
콩의 구체적인 유형을 기반으로 올바른 구현을 어떻게 인스턴스화 할 수 있습니까?
필자는 타이핑과 맵을 사용하여 올바른 구현을 "매핑"했습니다. 이를 달성하기 위해 더 나은
public void hungry(Fruit fruit) {
Map<String, String> obj2impl = new HashMap<String, String>();
obj2impl.put("Fruit", "FruitMilkshake");
obj2impl.put("Banana", "BananaMilkshake");
obj2impl.put("Pear", "PearMilkshake");
String name = fruit.getClass().getCanonicalName();
String implName = obj2impl.get(name);
Milkshake milkshake = (Milkshake) Class.forName(implName).newInstance();
milkshake.doMilkshake(fruit);
}
public interface Milkshake <T t> {
public String doMilkshake(T t);
}
public class FruitMilkshake implements Milkshake<Fruit> {
public String doMilkshake(Fruit fruit) {
return "Fruit Milkshake!";
}
}
public class BananaMilkshake implements Milkshake<Banana> {
public String doMilkshake(Banana banana) {
return "Banana Milkshake!";
}
}
public class PearMilkshake implements Milkshake<Pear> {
public String doMilkshake(Pear pear) {
return "Pear Milkshake!";
}
}
방법 : 이것처럼 ?
'배가 고프다'할 때마다 과일 맵을 다시 만들어서는 안됩니다. 이 맵을 대신 인스턴스 변수로 넣으십시오. 또는 과일 이름을 켭니다. – maba