java - 无法打开从 Eclipse 中的基类添加到接口的方法的实现
问题描述
我正在使用 Eclipse Neon。
基本上我正在创建一个新接口并向其添加在不同基类中找到的现有方法。
我有一个用抽象方法MyServiceImpl
扩展基类的类。GeneralServiceImpl
doB
我创建了一个接口并添加了GeneralService
方法:GeneralServiceImpl
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(+ 鼠标左键)中的doB()
方法( works)时,我找不到任何可用的实现(见下文)doC()
Ctrl
它是 Eclipse 错误吗?我的设置是否构造错误?我的期望错了吗?
注意
GeneralService
我可以打开它的doB()
方法的实现请注意我需要它的另一个原因也是为现有方法添加 Spring Service 支持
解决方案
请注意这不是错误。
让我们理解(我已经做了图示以便更好地理解):
很明显,GeneralServiceImpl
该类重写doB()
了实现接口GeneralService
的功能,也MyServiceImpl
实现doC()
了它的实现接口的功能MyService
。
MyServiceImpl
此外,和GeneralServiceImpl
--> MyServiceImpl
extends之间存在继承关系GeneralServiceImpl
,.MyServiceImpl
doB(){}
现在我们必须在这里了解IDE、完成和编译器使用静态视图。
如果您想知道运行时视图,则必须使用调试模式。
因此,如果我们看到您的类和接口的设计方式,则 and 之间没有直接关系MyService
,GeneralServiceImpl
因此eclipse
不知道其runtime
实现,因此不会突出显示相同的内容。
而是图中的虚线表示runtime
关系,因此表示 voiddoB();
函数的实现。
根据@howlger评论添加更多信息:
对于Interface
实现class
应该覆盖所有声明的函数(除非abstract
)。并且作为 IDEEclipse
在搜索函数的实现时,Interface
它只在实现类中寻找直接实现。(喜欢doC()
它的作品)。[静态视图/编译器]
现在,想象在MyServiceImpl
&之间GeneralServiceImpl
我们有另一个类,SubGeneralServiceImpl
它也是overrides doB()
public class SubGeneralServiceImpl extends GeneralServiceImpl {
public void doB() {
//
}
}
现在MyServiceImpl
延伸SubGeneralServiceImpl
和SubGeneralServiceImpl
进一步延伸GeneralServiceImpl
。
所以,即使现在MyServiceImpl
有 doB()但现在可以访问 2 doB() 实现,可以看出:
因此在静态视图(编译器)中,就MyServiceImpl
覆盖doB()
和...而言绝对没问题doC()
...但是作为 IDE 的 Eclipse 不确定将使用哪个实现在运行时出现,因此无法doB()
在尝试时为您提供实现从MyService
接口获取。
希望这可以帮助。
推荐阅读
- ios - 从 Firebase 检索数据需要很长时间
- mysql - redmine:项目和联系人(公司)的sql关系是什么
- google-sheets - 查看者(每个链接)在打开文件时跳转到当前日期
- ruby - main:Object 的未定义方法“lane”
- java - 如何启动 Java NMT
- android - TextAppearance.MaterialComponents.Body2 的定义?
- ios - React Native iOS 应用在 App Purchase 中被拒绝
- objective-c - 从 Swift 调用 .h 文件中定义的 Objective-C 函数
- c# - 队列将项目移回末尾
- neo4j - Cypher:嵌套 FOREACH 中的匹配节点