如何在不更改方法名称的情况下摆脱以下错误:
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());
}
您不能有两个参数不同的方法,它们的泛型类型不同,因为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为这样的方法