我有以下代码,但它不起作用:错误两种方法具有相同的擦除
出现。
public class Foo<V> {
public static void main(String[] args) {
}
public void Bar(V value) {
}
public void Bar(Object value) {
}
}
我还有这个代码:
public class Foo<V> {
public static void main(String[] args) {
}
public void Bar(B value) {
}
public void Bar(A value) {
}
}
class A {
}
class B extends A {
}
这是可行的。在第一种情况下,V
是对象
,就像在第二种情况下B
是a
。那么为什么第一种情况会导致错误,而第二种情况会成功编译?
编辑:我应该怎么做才能实现方法重载,而不引发错误?
V
不是“Object
的孩子”。V
是一个无界泛型类型,它擦除为Object
,导致错误。如果泛型类型是有界的,例如
我应该做什么来实现方法重载,而不引发错误?
简单:不要试图用具有相同擦除的参数使方法过载。
几个选项:
>
绑定类型变量,如@Kayaman所建议:
<V extends SomethingOtherThanObject>
我第一次在Java中使用泛型,我遇到了一个无法克服的问题:为什么这样编译: 但这并不: 我得到了这个错误:两种方法有相同的擦除。 如果这是一个愚蠢的问题,我很抱歉,但我不明白为什么有界类型参数声明中的接口顺序似乎很重要。事实上,我不认为是顺序导致了错误,但我不明白是什么导致了错误。 我正在读Oracle的文档,它说我必须把类作为第一个参数,但是Aa,Bb和Cc都是接口。对我的英语也感到抱歉。
问题内容: 为什么在同一个类中使用以下两种方法是不合法的? 我得到了 方法add(Set)与类型Test中的另一个方法具有相同的擦除add(Set)。 虽然我可以解决它,但我想知道为什么javac不喜欢这样。 我可以看到,在很多情况下,这两种方法的逻辑非常相似,可以用一个方法代替 方法,但并非总是如此。 如果你想让两个带有这些参数,这会特别令人讨厌,因为那样你就不能只更改其中一个的名称。 问题答案
如何在不更改方法名称的情况下摆脱以下错误: 我的方法:
我在Java中有两个几乎相同的方法。唯一的区别是它们有不同的参数类型。它们使用泛型并返回输入参数的类型T。我怎样才能摆脱重复的代码?下面是我的两个方法。最后,它们都使用不同的类型调用Spring。否则,方法是相同的。
问题内容: 我们可以创建相同的GET URI,但使用不同的查询参数吗? 例如,我有两个REST GET URI: 现在,REST服务无法将两个GET方法识别为单独的,而仅将其声明为第一个GET方法。 为什么会这样呢? 有什么办法可以使两个具有不同查询参数的GET方法? 如果您可以引用任何资源,将不胜感激。 问题答案: 因为 资源 是由其 PATH 唯一标识的,而不是由其参数唯一标识的。您定义的两个
我有两个不同的方法,在两个不同的类中。我希望他们都能阅读同一行输入,并检查不同的内容。一个查找“给我冲杯咖啡”之类的说明,另一个查找不同的关键字,如“请”和“谢谢”(这些影响程序对我的反应): 然后我在我的主字符串中调用它们,只是为了测试它们: 我的控制台显示如下: 我知道发生了什么,但我想不出其他办法。我也尝试过使用同一个扫描仪,不同的字符串,但仍然不起作用。我怎样才能使这两种方法都能读取我的第