繁体   English   中英

程序接口-但在实现时具有自定义方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM