gpt4 book ai didi

java - 无法打开从 Eclipse 中的基类添加到接口(interface)的方法的实现

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:05:16 26 4
gpt4 key购买 nike

我正在使用 Eclipse Neon。

基本上我正在创建一个新接口(interface)并向其添加在不同基类中找到的现有方法。

我有一个类 MyServiceImpl,它使用抽象方法 doB 扩展了基类 GeneralServiceImpl

我为 GeneralServiceImpl 创建了一个接口(interface) GeneralService 并添加了 doB 方法:

public interface GeneralService {    
abstract void doB();
}

public class GeneralServiceImpl implements GeneralService {
@Override
public void doB() { }
}
}
@Service
public class MyServiceImpl extends GeneralServiceImpl implements MyService {
@Override
public void doC() { }
}

我的新界面包括期望使用 GeneralServiceImpl 方法 doB()

public interface MyService {
public void doC();
public void doB();
}

这有效,但在 eclipse 中,当我在 MyService Open Implementation (Ctrl +鼠标左键单击)我找不到任何可用的实现(见下文)

是 Eclipse 错误吗?我的设置是否构造错误?我的期望错了吗?

  • 来自 GeneralService 的注释我可以打开其 doB() 方法的实现

  • 请注意,我需要它的另一个原因也是为现有方法添加 Spring 服务支持

最佳答案

请注意这不是错误。

让我们理解(为了更好地理解,我做了图示):

enter image description here

很明显GeneralServiceImpl类重写了实现接口(interface)GeneralServicedoB()函数以及MyServiceImpl 实现其实现接口(interface)MyServicedoC()函数。

另外,MyServiceImplGeneralServiceImpl之间存在继承关系 --> MyServiceImpl extends GeneralServiceImpl ,所以 MyServiceImpl 具有 doB(){}

现在我们必须在这里了解 IDE、完成和编译器使用静态 View 。

如果您想了解运行时 View ,那么必须使用 Debug模式。

因此,如果我们看到您的类和接口(interface)的设计方式,则 MyServiceGeneralServiceImpl 之间没有直接关系,因此 eclipse 是不知道它的 runtime 实现,因此不会突出显示相同的内容。

图中的虚线表示runtime 关系,因此表示void doB(); 函数的实现。


根据@howlger 评论添加更多信息:

对于实现classInterface 应该覆盖所有声明的函数(除非abstract)。作为 IDE Eclipse,当从 Interface 中搜索函数的实现时,它只会在实现类中查找直接实现。 (就像 doC() 一样有效)。 [静态 View /编译器]

现在,想象在 MyServiceImplGeneralServiceImpl 之间,我们有另一个类 SubGeneralServiceImpl,它也 重写 doB() 作为

public class SubGeneralServiceImpl extends GeneralServiceImpl {
public void doB() {
//
}
}

现在 MyServiceImpl 扩展了 SubGeneralServiceImpl 并且 SubGeneralServiceImpl 进一步扩展了 GeneralServiceImpl

所以,即使现在 MyServiceImpl 有 doB() 但现在可以访问 2 个 doB() 实现,可以看出:

enter image description here

因此在静态 View (编译器)中,只要 MyServiceImpl 覆盖 doB() & doC() 就绝对没问题...然而,作为 IDE 的 Eclipse 不确定在运行时将使用哪个实现,因此在尝试从 MyService 获取时无法为您提供 doB() 的实现> 界面。

希望这对您有所帮助。

关于java - 无法打开从 Eclipse 中的基类添加到接口(interface)的方法的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55399568/

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