주어진 클래스에 MyClassDescendant
개체를 채우는 정적 메서드가있는 추상 클래스 MyClass
이 있습니다. 이 메서드는 getRandom()
메서드를 MyClassDescendant
으로 호출하여 개체 인스턴스를 가져와야합니다. 인스턴스 또는 클래스 이름없이 클래스 개체를 얻는 방법
public static void populate(Collection<MyClass> coll, Class<? extends MyClass> cl, int num) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
for (int i = 0; i < num; i++) {
Method m;
m = cl.getMethod("getRandom");
coll.add((MyClass)(m.invoke(null)));
}
}
가 그럼 난 그런 식으로 전화 :
나의 현재 코드는 다음과 같습니다
MyClass.populate((Collection<MyClass>)(Collection<?>)collection, MyClassDescendant.class, 3);
이 코드는 작동하지만, 추한. 실제로 같을 것이다 달성하고 싶었다 무엇 :
MyClassDescendant.populate(collection, 3);
는 정적 메서드 아니었다면, 난 그냥 this.getClass()
을 사용하십시오. MyClass.class
은 정적 메서드에서 작동하지만, MyClass
에 대해서는 class
을 원하지는 않지만 특정 MyClassDescendant
(소수 유형이 있음)에 대해 알고 싶습니다.
인스턴스 또는 클래스 이름을 갖지 않고 클래스 객체를 가져올 수있는 방법이 있습니까?
를 호출 할 수 있습니다. 대신 파생 클래스마다 구현하여 컬렉션에 해당 클래스의 인스턴스를 채울 수 있습니다. – niculare
그래, 그게 효과가 있지만, 여러 클래스에 걸쳐 거의 동일한 코드를 복사하여 붙여 넣는 것을 피하고 싶습니다. – gronostaj
항상 정적 컨텍스트에서 호출합니까? –