내가 아는 한, 내가하려고하는 것은 불가능합니다. 그러나 여기에 3 개의 작은 코드 샘플이 있습니다. 첫 번째 것은 현재 가지고있는 것이고, 두 번째는 내가 갖고 싶은 것이고, 세 번째는 달성 할 수있는 방법입니다. 반사. 두 번째 예제에 더 가까워 지도록 코드를 재구성하는 방법이 있는지 궁금합니다. 몇 가지 가정이 있습니다. 여기에서 사용되는 각 클래스에는 생성자가 하나만 있으며 필요한 객체가 정확히 구분됩니다. Object []는 런타임에 모든 것을 모르기 때문입니다. 리플렉션을 사용하지 않고 클래스 객체 인스턴스화
Object o; Object[] params; String myString;
HashMap<String, Class<?>> map;
o = new map.get(myString)(params); //Obviously doesnt work
실제로 위의 거짓말
3.
Object o; Object[] params; String myString;
HashMap<String, Class<?>> map;
o = map.get(myString).getConstructors()[0].newInstance(params);
주
2.
Object o; Object[] params; String myString;
switch(myString){
case "ClassA": o = new ClassA(params);
case "ClassB": o = new ClassB(params);
//ETC
}
1.
. 지금 당장 가지고있는 것은1
이 아니라
3
입니다. 모든 클래스 이름을 하드 코드 할 수 없기 때문에
1
을 가질 수 없습니다. 그래도
2
을 갖고 싶습니다. 어떤 제안?
일부 해명은 : 예제
해시 맵 2
및 3
는 클래스 이름의 문자열 표현, 실제 클래스 객체의 쌍을 포함하고 있습니다.
또한 런타임시 (분명히) 채워집니다. 즉 위의 코드를 실행하기 전에 인스턴스화하려는 모든 가능한 클래스를 알고 있지만 그 중 일부는 하드 코딩 할 수 없습니다. 파일로로드됩니다. .
왜 원하니? 'map'에 무엇이 있습니까? –
반사를 사용하지만 반사를 사용하지 않고 인스턴스화하는 것은 복잡합니다. – davidxxx
모든 클래스 이름을 하드 코딩 할 수 없다면 '2'를 가질 수 없으며 모든 문자열을 어디에서 가져와야합니까? 아니면 오해인가요? 코드에서 가능한 한 모든 클래스 (ClassA, ClassB ...)에 대해 한 지점에서 알 수 있습니까? –