2013-04-23 2 views
0
public interface myInterface<T> { 

    public List<T> doWork(); 

} 

public abstract class baseClass<T> implements myInterface<T>{ 

    protected T obj; 
    protected List<T> list; 

    public baseClass<T>(){ 
     //how do I initiate obj? 
     //how do I initiate list? 
    } 
} 

public class myClassA extends baseClass<T> { 

public List<T> doWork() 
} 

이 코드가 있는데 나는 어떻게 obj와 T 유형의 목록을 동적으로 시작할 수 있는지 궁금합니다.제네릭 유형을 시작하는 방법

+0

'List '은 쉽지만,'new ArrayList ()'입니다. –

답변

0

초록이기 때문에 BaseClass에 초기화하지 않아도됩니다. 그러나, 당신은 확실히 그것을 할 수 있습니다. 그리고 클래스 이름을 자본이 B이고 자본이 M 인 인터페이스를 표준으로 사용하십시오. 당신이 할 필요가없는 것은 생성자에 <T>을 넣는 것입니다.

public BaseClass(T obj, List<T> list){ 
    this.obj = obj; 
    this.list = list; // Or copy it for safety. 
} 

당신이 목록은 클래스 자체에 의해 생성하려면 선언에서 초기화 : 일반적으로

protected List<T> list = new ArrayList<>(); // Java 7 
public BaseClass(T obj){ 
    this.obj = obj; 
} 
0

, 제네릭, 당신이 입력 한 개체로 전달됩니다 여기에 하나의 가능성이다 일반 객체 (또는 생성 방법을 알고있는 팩토리)를 생성 할 때 사용할 수 있습니다.

다른 것은 해킹입니다. 컴파일러가 말할 수있는 것보다 더 많은 지식이 필요합니다. 예를 들어, "reflection"을 사용하여 0 인수 생성자가 있다고 가정합니다 (적어도 이것을 수행해서는 안됩니다. 당신이 이 될 때까지 당신은 무슨 일이 일어나고 있는지 알고 있습니다 - 어떤 경우에는 당신이 그것을하기를 원하지 않을 것입니다).

관련 문제