这是我正在尝试编写的方法(现在不编译,因为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.问题是,我不知道该怎么写.你能帮我吗?
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的建议,因为它向您展示了如何使您的代码更清晰.
您是否需要将T定义为参数类型?
public <V> ArrayList<V> mySelect(Iterable<V> what, ITest<V> x) {
Run Code Online (Sandbox Code Playgroud)
返回接口List而不是实现ArrayList通常是很好的形式.