2012-06-16 22 views
3

전달한 특정 유형의 Vector를 리턴하는 함수를 작성하고 싶습니다. 예를 들어 :자바에서 일반 함수 작성하기

// Here getNewVector(<ClassType>) should return me an integer Vector. 
Vector<Integer> myIntVector = getNewVector(Integer.class); 
//should get a String vector in this case and so on. 
Vector<String> myStringVector = getNewVector(String.class) ; 

나는 특정 클래스 형의 새로운 벡터를 반환 할 수있는 방식으로 getVector(Class classType)을 구현하려는. 반사를 사용하지 않고 클래스 이름을 String으로 전달하지 않고 어떻게 구현할 수 있습니까? (위의 예에서 언급 한 클래스 유형 만 전달하고 싶습니다.)

실제로 getVector) 다소 비슷합니다.

Vector<T> getVector(T t) { 
    return new Vector<t>(); 
} 
+1

나는 Vector 사용에 대해 두 번 생각할 것이다. 대신 목록 사용을 고려 했습니까? – KidTempo

답변

8

Java Tutorial for Generic Methods을 살펴보십시오. 여기 당신이 원하는 것을 할 수있는 하나의 방법이다 : 나는 그냥 버리고 싶어하지 않을거야 있으리라 믿고있어

public static <T> Vector<T> getVector(Class<T> clazz) { 
    return new Vector<T>() 
} 

public static <T> Vector<T> getVector(T t) { 
    Vector<T> vector = new Vector<T>(); 
    vector.add(t); 
    return vector; 
} 

t 당신이 getVector(T t)에 통과, 그래서 나는 Vector에 붙어. 당신이 원하는 모든이 입력 메커니즘 인 경우

이론적으로, 당신은 방법에 아무것도 통과 할 필요가 없습니다 :

public static <T> Vector<T> getVector() { 
    return new Vector<T>(); 
} 

//Usage 
Vector<Integer> vector = getVector(); 

자바는 당신이에 일반 입력에서 Vector<Integer>로 입력 할 것을 알아낼 수 선언.

+0

고맙습니다. 정말 도움이되었습니다. Tim – Anish

1
public <T> Vector<T> getNewVector(Class<T> type) { 
    return new Vector<T>(); 
} 
+0

정적 방법이어야합니다. – Justin

1

왜 여기에 기능을 작성해야합니까?

Vector<Integer> myIntVector = new Vector<Integer>(); 

또는, 더 나은, 당신이 자바 7에 있다면

Vector<Integer> myIntVector = new Vector<>(); 

(다른 요소 유형 벡터 유형 간의 물론 런타임에 실제 차이는, 없다.)