2014-12-10 2 views
0

나는 서명자바 : 특정 클래스 인스턴스를 만드는 방법은 무엇입니까?

<T extends AbstractClass> T method(Class<T> abstractClass) 

와 방법을하고 난 서명을 수정할 수 없습니다.

또한 클래스 이름이 com.test.MyClass 인 문자열이 있습니다. 내 메서드에 전달할 클래스 이름으로 클래스를 만들 수 있습니까? 같은

뭔가 그

Class<? extends AbstractClass> clz = (Class<? extends AbstractClass>) Class.forName(classNameStr); 
+2

추상 클래스의 구체적인 인스턴스를 실제로 만들 수는 없습니다. 당신은 그것으로부터 파생 된 것을 필요로 할 것입니다. –

+0

내 수업 이름은 구체적인 수업입니다. 추상 클래스를 확장 한 클래스의 이름입니다. – barbara

+3

@Robert OP는 클래스 이름이 '문자열'인 클래스의 인스턴스를 만드는 방법을 묻지 않습니다. 그녀는 주어진 method_를 호출하는 방법을 묻습니다. 그래서 클래스 이름이'String' 인 클래스의 객체를 리턴합니다. 그것은 어쨌든 내 이해입니다. – GriffeyDog

답변

2

당신이 유형의 안전 동적 클래스 로딩을 원하는 경우에, 올바른 방법은 다음과 같습니다 그것은 체크로

Class<? extends AbstractClass> clz = 
    Class.forName(classNameStr).asSubclass(AbstractClass.class); 

이 "선택 해제"경고를 생성하지 않습니다 실행시에 asSubclass 방법으로 그리고 이후에, 예를 들어 newInstance을 호출하면 ClassAbstractClass의 인스턴스를 반환합니다.


그래서 나중에 당신은 물론

AbstractClass obj = method(clz); 

을 수행 할 수 있습니다, 당신은

AbstractClass obj=method(Class.forName(classNameStr).asSubclass(AbstractClass.class)); 

과 구조를 인라인 할 수 있지만 나는 그것을 추천하지 않을 이유가 명백해야한다.

관련 문제