두 개의 차량 인 Car 및 Train을 고려하십시오. Car의 생성자는 두 개의 인수를 받고 Train의 생성자는 하나의 인수를받습니다. 인수는 유형과 수량이 다릅니다. Java에서 varargs를 사용하여 두 생성자를 모두 호출 할 수있는 제네릭 메소드를 갖고 싶습니다. 차량, 자동차 및 기차를 변경할 수 없다고 가정합니다.가변 수량을 Java에서 해당 수량 및 유형으로 확장하십시오.
doSomething
메서드에서 args
을 확장하는 방법에 문제가 있습니다. 변수 args
을 M
유형의 새 인스턴스 안에 던지면 작동하지 않습니다. 이게 가능합니까?
public class MainTest {
// Receive concrete type of vehicle and arguments for its constructor (variable)
public <M extends Vehicle> M doSomething(Class<M> a, Object... args)
throws InstantiationException, IllegalAccessException {
// How to pass variable number of arguments for the constructors?
M m = a.newInstance( args ); // <-- Problem is here, possible to solve?
return m;
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
MainTest test = new MainTest();
Car c = test.doSomething(Car.class, "Jill", 35);
Train t = test.doSomething(Train.class, 35.1);
}
}
public class Vehicle {
/* currently empty */
}
public class Car extends Vehicle {
public Car(String name, int n) {
}
}
public class Train extends Vehicle {
public Train(double d) {
}
}
제 경우에는 질문에서 언급 한 것처럼 * 차량, 자동차 및 기차 *를 변경할 수 없습니다. 그래도 다른 경우에 유용합니다. – Daniel
@Daniel 나는 수업을 전혀 변경하지 않았다 (글자 그대로 복사). 너는 필요 없어. – user2336315
당신이 맞아요, 사과드립니다! 언급하지는 않았지만이 클래스를 수십 개의 클래스를 전달하는 프로젝트에 사용하고 리플렉션을 사용하면 훨씬 적은 코드가 포함됩니다. 나는 그것이 질문의 시점까지 더 느껴졌 기 때문에 이미 다른 대답을 선택했으나 감사합니다. (그것이 가치가 있었던 것에 따라 아직도 upvoted!) – Daniel