如何在Java中创建一个泛型方法,其中一个参数化类型必须实现Iterable?

Geo*_*Geo 0 java generics

这是我正在尝试编写的方法(现在不编译,因为what它不被视为Iterable):

public <T,V> ArrayList<V> mySelect(T what,ITest<V> x) {
     ArrayList<V> results = new ArrayList<V>();
     for(V value : what) {
        if(x.accept(value)) {
           results.add(value);
        }
     }  
     return results;
}
Run Code Online (Sandbox Code Playgroud)

T类型实现Iterable,并V在使用时返回对象foreach.问题是,我不知道该怎么写.你能帮我吗?

Boz*_*zho 5

public <T extends Iterable<V>,V> ArrayList<V> mySelect(T what, ITest<V> x) {
Run Code Online (Sandbox Code Playgroud)

背后的逻辑:T是任何子类(在这种情况下实现类)Iterable,并且Iterable被定义为迭代V

我建议阅读araqnid的建议,因为它向您展示了如何使您的代码更清晰.


ara*_*nid 5

您是否需要将T定义为参数类型?

public <V> ArrayList<V> mySelect(Iterable<V> what, ITest<V> x) {
Run Code Online (Sandbox Code Playgroud)

返回接口List而不是实现ArrayList通常是很好的形式.