当前位置: 首页 > 知识库问答 >
问题:

无法从静态内容[duplicate]引用Java泛型和方法

周锐
2023-03-14

在学习Java课程时,我被要求将常规类转换为通用类。我想我部分成功了,但我找不到100%正确的方法。

public class ElementUtils {
    public static <T> List transformedList(List<T> inList, Function<T, T> f) {
        List<T> outList = new ArrayList<>();
        for (T s : inList) {
            outList.add(f.apply(s));
        }
        return outList;
    }
}

考试班

public class Test {
    public static void main(String[] args) {
        List<String> lijst = Arrays.asList("Jan", "Jos", "Anna", "Pieter", "Johan");

        List<String> upCaseList = ElementUtils.transformedList(lijst, String::toUpperCase);
        List<String> replaceList = ElementUtils.transformedList(lijst, s -> s.replace("i", "IETS"));
        List<String> exclList = ElementUtils.transformedList(lijst, s -> s + "!");
        List<Integer> wordLengths = ElementUtils.transformedList(lijst, String::length);

        System.out.println(upCaseList);
        System.out.println(replaceList);
        System.out.println(exclList);
        System.out.println(wordLengths);
    }
}

当我删除最后一条语句wordLengths时,它工作正常,但会发出警告。有了最后一条语句,它会告诉ne我不能从静态内容引用方法。

错误:

Error:(13, 49) java: method transformedList in class cvo.ex2.ElementUtils cannot be applied to given types;
  required: java.util.List<T>,java.util.function.Function<T,T>
  found: java.util.List<java.lang.String>,String::length
  reason: inference variable T has incompatible bounds
    equality constraints: java.lang.String
    lower bounds: java.lang.Integer

我不明白我错过了什么。。。谢谢你的帮助。

共有2个答案

阎安邦
2023-03-14

大体上

在这一行:列表

什么

施旭东
2023-03-14

为输入和输出提供相同的泛型类型T。您需要输入类型T和结果类型R,还需要返回类型R的列表以消除警告。

public static <T,R> List<T> transformedList(List<T> inList, Function<T, R> f) {
    List<R> outList = new ArrayList<>();
    for (T s : inList) {
        outList.add(f.apply(s));
    }
    return outList;
}
 类似资料:
  • 问题内容: 我无法编译以下代码: 出现以下错误: 无法从静态内容引用非静态方法calcArea(int,int) 这是什么意思?我该如何解决该问题..? 编辑: 根据您的建议,我创建了一个新的test()实例,如下所示: 这样对吗?如果我这样做有什么区别… 问题答案: Nanne提出的建议绝对可以解决您的问题。但是,我认为如果现在就养成习惯,在学习Java的早期阶段,尝试尽可能少地使用静态方法(例

  • 我试图在我的程序中使用accessors(Set/Get)方法,当我试图在main方法中使用Get方法时,我得到了以下错误: 无法从Student类型对非静态方法进行静态引用。 我不确定如何着手解决这个问题。我是Java编程的初学者。 以下是具体的问题: 设置/获取方法: 错误行: 任何建议都将不胜感激* 我的代码的完整图片。

  • 问题内容: 我遇到了一个涉及静态泛型方法的奇怪情况。这是代码: 我为什么不必在表达式中指定任何类型参数?这是某种类型推断吗?如果我想对此进行明确说明,如何指定类型参数? 问题答案: 是的,根据JLS第15.12.2.8节,这是基于分配目标的类型推断。明确地说,您可以这样称呼:

  • 我正在尝试调用一个位于类的片段中的方法。现在我得到一个错误:非静态方法checkWriteStoragePermission()不能从静态内容引用。我真的没主意了。我搜索了两天没有任何结果。 我试图在其中调用方法的类: Fragment类中的方法: 我怎么能轻松搞定这个?因为我无法将其转换为静态方法。 亲切的问候,

  • 这是一个代码的一部分,但当我执行时,我得到了一个错误程序是关于线性规划对不起我的英语,或关于愚蠢的问题 “错误:不能从静态上下文引用非静态方法get_total_profity(String)

  • 问题内容: 在Java中,我希望具有以下内容: 但是我明白了 我对基本用途以外的泛型没有什么了解,因此对此没有多大意义。我无法在互联网上找到有关该主题的很多信息,这无济于事。 有人可以通过类似的方式澄清这种使用是否可行吗?另外,为什么我最初的尝试失败了? 问题答案: 你不能在静态方法或静态字段中使用类的泛型类型参数。该类的类型参数仅在实例方法和实例字段的范围内。对于静态字段和静态方法,它们在类的所