2009-06-23 3 views
4

는 기본적으로 나는 다음과 같은 서명이 방법을 만들려면 :주어진 하위 클래스의 인스턴스를 반환하는 메서드의 일반 서명은 무엇입니까?

public <T> T getShellTab(Class<T extends ShellTab> shellTabClass) 

을하지만이 유효 자바하지 않습니다.
ShellTab의 하위 클래스 인 클래스를 전달하고 해당 클래스의 인스턴스를 반환 할 수있게하려고합니다.

public <T> T getShellTab(Class<T> shellTabClass) 

는 잘 작동하지만 나는 ShellTab의 서브 클래스로 shellTabClass을 강제하고 싶습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?

감사합니다.

답변

12

는 다음과 같이, 최초 제네릭 매개 변수에 제약을 넣어 : 당신이 메서드 매개 변수의 제네릭 형식 매개 변수에 대한 제약 조건을 가질 수

public <T extends ShellTab> T getShellTab(Class<T> shellTabClass) 

주 (예를 들어, Tom Hawtin - tacklineshellTabClass 만들기 대해 제시 Class<? extends T>로, 나는 그것이이 경우에 차이를 만든다고 생각하지는 않지만).
그러나 이미 선언 된 형식은 제한 할 수 없습니다.

+0

아마도 public T getShellTab (클래스 shellTabClass)입니다. –

+0

내가 게시 한 것 이상으로 구매하나요? T는 어쨌든 ShellTab의 하위 클래스 일 수 있습니다. 맞습니까? –

+0

D' Oh! 그것의 아주 간단한 지금! 굉장해, 고맙다. – Sandro

3

어때?

public <T extends ShellTab> T getShellTab(Class<T> shellTabClass) 
관련 문제