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

Java - 擦除方法与类型 [重复] 中的另一个方法相同

胡天佑
2023-03-14

如何在不更改方法名称的情况下摆脱以下错误:

erasure of method is the same as another method in type

我的方法:

public static List<String> convert(List<String> list, Function<String, String> convertFunction) {
                
    list
                .stream()
                .map(ele -> convertFunction.apply(ele))
                .collect(Collectors.toList());
}
            
public static List<Map<String, String>> convert(List<Map<String, String>> list, Function<String, String> convertFunction) {

   return list
                .stream()
                .map(ele -> ele.entrySet()
                        .stream()
                        .collect(Collectors.toMap(k -> convertFunction.apply(k.getKey()),
                                v -> convertFunction.apply(v.getValue()))))
                .collect(Collectors.toList());
        
}

共有1个答案

宓博实
2023-03-14

您不能有两个参数不同的方法,它们的泛型类型不同,因为List

在运行时,将有列表

这就是泛型在Java中的实现方式,你不能用它做任何事情。

但是您可以将这两种方法组合在一起:

public static <T, R> List<R> convert(List<T> list,
                                     Function<T, R> convertFunction) {
    
    return foo;
}

 类似资料:
  • 问题内容: 为什么在同一个类中使用以下两种方法是不合法的? 我得到了 方法add(Set)与类型Test中的另一个方法具有相同的擦除add(Set)。 虽然我可以解决它,但我想知道为什么javac不喜欢这样。 我可以看到,在很多情况下,这两种方法的逻辑非常相似,可以用一个方法代替 方法,但并非总是如此。 如果你想让两个带有这些参数,这会特别令人讨厌,因为那样你就不能只更改其中一个的名称。 问题答案

  • 问题内容: 我是从Joshua Bloch的google I / O困惑者演讲中得到的。这是代码 这个main方法会引发异常,因为它是原始类型,因此in中的所有泛型都将被删除,因此最终调用而不是。 我的问题是,即使我打电话是不是应该把它调用的方法,因为由于类型擦除,这种方法是有效的并且是类型的不是? 问题答案: 被调用的方法是在编译时定义的,而不是在运行时定义的。 如果在构造函数调用中添加参数,则

  • 我有以下代码,但它不起作用:出现。 我还有这个代码: 这是可行的。在第一种情况下,是,就像在第二种情况下是。那么为什么第一种情况会导致错误,而第二种情况会成功编译? 编辑:我应该怎么做才能实现方法重载,而不引发错误?

  • 我想这样设置参数的类型: 当我尝试这样做时,会引发错误:NameError:名称'Tree'未定义

  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法