这个问题在这里已经有了答案:
Static method invocation
(5 个回答)
Can I call a static method of another class without using the class name?
(3 个回答)
3年前关闭。
我对此代码有疑问。它抛出“方法 collectFrom(List < Integer> ) 未定义 Main 类型”错误,我真的不知道问题出在哪里。
“test1”方法的选择器应该从列表中选择小于 10 的数字,映射器应该将这些选择的数字增加 10。
import java.util.*;
public class Main {
public Main() {
List<Integer> src1 = Arrays.asList(1, 7, 9, 11, 12);
System.out.println(test1(src1));
}
public List<Integer> test1(List<Integer> src) {
Selector<Integer> sel = new Selector<Integer>() {
@Override
public boolean select(Integer a) {
if(a < 10) {
return true;
} else {
return false;
}
}
};
Mapper<Integer> map = new Mapper<Integer>() {
@Override
public Integer map(Integer a) {
return a+=10;
}
};
return collectFrom(src).when(sel).mapEvery(map);
}
public static void main(String[] args) {
new Main();
}
}
这是我的类 ListCreator:
import java.util.ArrayList;
import java.util.List;
public class ListCreator <T>{
List<T> lista;
private ListCreator(List<T> src) {
this.lista = src;
}
public static <T> ListCreator<T> collectFrom(List<T> src) {
ListCreator<T> ls = new ListCreator<T>(src);
return ls;
};
public ListCreator<T> when(Selector s) {
List<T> whenLista = new ArrayList<T>();
for(int i = 0; i < lista.size(); ++i) {
if(s.select(lista.get(i))) {
whenLista.add(lista.get(i));
}
}
this.lista = whenLista;
return this;
};
public List<Integer> mapEvery (Mapper m) {
List<Integer> mapLista = new ArrayList<Integer>();
for(int i = 0; i < lista.size(); ++i) {
mapLista.add((Integer)m.map(lista.get(i)));
}
return mapLista;
}
}
Selector 和 Mapper 只是简单的参数化接口(interface)。
最佳答案
collectFrom is a static method defined in the
列表创建者 class, not in
主要`。您可以限定通话:
return ListCreator.collectFrom(src).when(sel).mapEvery(map);
或者只是静态导入它:
import static mypackage.ListCreator.collectFrom;
关于java - 未为 Main 类型定义方法 collectFrom(List<Integer>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52840159/