java - 未为 Main 类型定义方法 collectFrom(List<Integer>)

标签 java list generics interface compiler-errors

这个问题在这里已经有了答案:





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/

相关文章:

java - @JsonSerialize 与泛型

java - 是否可以为方法分配不同的返回类型

java - 使用 Eclipse 功能 - 项目文件现在已隐藏?

java - Modelmapper:当源对象为空时如何应用自定义映射?

java - Keycloak:检索所有可用的客户端 session

java - JTable 缺少列标题

python - 在Python中存储零的列表与字典

generics - 在 TypeScript 泛型中使用 "extends"关键字

xml - 如果它们是字符串列表,如何获取值属性的内容并在 XSLT 中拆分它们?

java8 - 从对象内部的属性分组