我在Java 8中使用以下代码时遇到问题,在Java 7中,代码可以正常工作,但是当我将其更改为Java 8时,它显示此错误:
对于类型Z,mymethod(arg1,context,arg2)方法不明确。
我尝试在调用方法时使用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";
}
}
答案 0 :(得分:0)
您提供的这段代码不完整或太含糊,我不知道您要做什么?
那是您的第一堂课,很正常(在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测试了相同的代码,并出现了相同的错误。 / p>
最后一个代码不是一个类,而是一个不属于上述任何一个类的方法:
@Override
protected String mymethod(final SomeObject arg1,final
AbstractContext<MyModel> context,final SomeObject1 arg2){
//some new logic
return "newtest";
}
您不能在Java中创建不属于任何类的方法。
(希望您在使用不同版本的jdk之前了解有关Java的更多信息)