2009-12-18 1 views
0
what

Java에서 매개 변수화 된 유형 중 하나에서 Iterable을 구현해야하는 일반 메소드를 어떻게 작성합니까?

형식은 Iterable을 구현하고 foreach을 사용할 때 V 개체를 반환합니다. 것은, 나는 그것을 쓰는 방법을 모른다. 도울 수 있니?

+0

관련이 있지만 메서드에서 List와 같은 인터페이스를 반환해야합니다. 또한 인터페이스에 대한 표준 Java 명명 규칙은 앞에 "I"를 붙이지 않는 것입니다. –

+0

ITest 및/또는 Iterable 을 사용하여 값을 얻을 수 있습니다. 메서드의 코드는 변경하지 않아도되지만 ITest 과 같은 광범위한 ITest를 전달할 수 있습니다. – ILMTitan

답변

5
public <T extends Iterable<V>,V> ArrayList<V> mySelect(T what, ITest<V> x) { 

뒤에 논리 : T는 서브 클래스는 Iterable가에 반복 정의 Iterable의 (구현이 경우 클래스), 및 입니다 V

당신을 보여주기 때문에 내가 araqnid의 제안을 읽는 것이 좋습니다

코드를 명확하게 만드는 방법.

5

T를 매개 변수 유형으로 정의해야합니까?

public <V> ArrayList<V> mySelect(Iterable<V> what, ITest<V> x) { 

일반적으로 구현 ArrayList가 아니라 인터페이스 List를 반환하는 것이 좋습니다.

+0

다른 약점을 찾아 내기 위해 +1 – Bozho

+0

약점, +1 – whiskeysierra

1

내가 쓰는 방법. 호출자가 특정 컬렉션 유형을 알고 있거나 기대해야하므로 ArrayList를 명시 적으로 반환하지 않습니다.

public <V> List<V> mySelect(Iterable<V> what,ITest<V> x) { 
    List<V> results = new ArrayList<V>(); 
    for(V value : what) 
     if(x.accept(value)) results.add(value); 
    return results; 
} 
관련 문제