![](/img/trans.png)
[英]Lambda implementation of functional interface returns "unimplemented methods" error - but program works
[英]Program to interface - but with custom methods on implementation
最近,我在Spring Boot中实现了一个类的实现,因此无法对其接口进行编程,因此遇到了这个问题,因为我要在实现上调用的方法在接口上不存在。
我将简化问题; 以下是一个接口以及该接口的实现:
public interface Vehicle {
public String beep();
}
public class Car implements Vehicle {
public String beep() {
return "BEEP!";
}
public String breakDown() {
return "CRASH BANG WALLOP";
}
}
如果我将汽车称为车辆,则由于接口上不存在breakDown
方法,因此无法使用它。
public void test() {
Vehicle myVehicle = new Car();
myVehicle.breakDown();
}
有没有解决的办法?
作为参考,我遇到问题的Spring Boot实现是实现JavaMailServer
接口的JavaMailSenderImp
类,但是我也有一些自定义方法,当我对其接口进行编程时无法访问。
您始终可以将对象转换为特定类型并使用自定义方法
((Car) myVehicle).breakDown();
如果您知道实现接口的类的类型,则只需将其转换为该类型即可:
public void test() {
Vehicle myVehicle = new Car();
((Car) myVehicle).breakDown();
}
根据您的代码,这可能会导致有关未检查的强制类型转换的警告,您可以使用@SuppressWarnings("unchecked")
直接禁止显示,也可以通过使用instanceof
在进行强制转换之前验证类型来进行@SuppressWarnings("unchecked")
。
但是,最终,这指向了代码设计中的一个问题。 接口的目的是使用您的服务从代码中提取实现细节,并减少耦合。 如果要对接口进行编码,则理想情况下,您应该能够在后台交换实现,而不会影响与服务交互的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.