gpt4 book ai didi

java - Java 8重写时该方法不明确

转载 作者:行者123 更新时间:2023-12-02 11:10:21 24 4
gpt4 key购买 nike

我在Java 8中使用以下代码遇到问题,在Java 7中,代码工作正常,但是当我将其更改为Java 8时,它显示此错误:

The method mymethod(arg1,context,arg2) is ambiguous for the type Z.



我尝试在调用该方法时使用 AbstractContext<MyModel>,在Eclipse中该错误消失了,但在编译时仍然发生。有人知道什么地方可能出问题吗?
public interface K<T extends MyModel>{
AbstractContext<T> create(T context, SomeObject arg1, SomeObject1 arg2);
}

public abstract class X {

@Override
public AbstractContext<MyModel> create(final MyModel context,final SomeObject1 arg1,SomeObject2 arg2){
//somelogic
}
protected String mymethod(final SomeObject arg1,
final AbstractContext<MyModel> context, final SomeObject1 arg2){
//some logic
return "test";
}
}

public class Y extends X implements Z<MyModel>{

@Override
public AbstractContext<MyModel> create(final MyModel context,final
SomeObject1 arg1,SomeObject2 arg2){
//somelogic
}
protected String mymethod(final SomeObject arg1,
final AbstractContext<MyModel> context, final SomeObject1 arg2){
return super.mymethod(arg1,context,arg2);
}
}

public class Z extends Y {
protected void somemethod(arg1,context,arg2){
//some logic
this.mymethod(arg1,context,arg2);
}//here error occurs


@Override
protected String mymethod(final SomeObject arg1,
final AbstractContext<MyModel> context, final SomeObject1 arg2){
//some new logic
return "newtest";
}
}

最佳答案

您提供的代码不完整或太含糊,我不知道您要做什么?

那是您的第一个类,很正常(在jdk7,8,9,10&11上运行)

public abstract class X {
protected String mymethod(final SomeObject arg1,final
AbstractContext<MyModel> context,final SomeObject1 arg2){
//some logic
return "test";
}
}

那是你的第二堂课:
public class Y extends X {
protected String mymethod(final SomeObject arg1,final
AbstractContext<MyModel> context,final SomeObject1 arg2){
return super.mymethod(arg1,context,arg2);
}
}

关于它的快速提示如果您不想更改某个方法的行为,请不要重写该方法。

现在是第三类:
public class Z extends Y {
protected void somemethod(){
this.mymethod(arg1,context,arg2);
}//here error occurs
}

有一些您使用过的变量,但是您没有定义-甚至没有初始化-因此,当然在您使用此行的这行中有一个错误,我使用jdk7测试了相同的代码,并出现了相同的错误。

最后一个代码,它不是一个类,而是一个不属于上述任何一个类的方法:
@Override
protected String mymethod(final SomeObject arg1,final
AbstractContext<MyModel> context,final SomeObject1 arg2){
//some new logic
return "newtest";
}

您不能在Java中创建不属于任何类的方法。

(希望您在使用不同版本的JDK之前了解有关Java的更多信息)

关于java - Java 8重写时该方法不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51590900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com