java - 如何从类中隐藏不支持的接口(interface)方法

标签 java interface

我有一个界面:

public interface Service {
    default Type service1(Type t) throws IOException {
        throw new UnsupportedOperationException();
    }

    default Type service2(Type t) throws IOException {
        throw new UnsupportedOperationException();
    }
}

以及一个实现该接口(interface)但只需要service2的类:

class MyService implements Service{
    @Override
    Type service2(Type t) throws IOException {
        ...
    }
}

然后我创建一个 myservice-instance:

Service s = new MyService();
s.service1(t); // throws error at runtime

是否有更好的方法来隐藏或标记 service1() 方法,以表明没有人应该在代码中使用此不受支持的方法(例如,通过注释?)。或者我是否必须为这种情况创建另一种模式?

最佳答案

Service 接口(interface)(根据您的描述)明显违反了接口(interface)隔离原则 ( ISP )。您应该有两个接口(interface):Service1Service2。如果您需要聚合,可以通过名为 AggregateService 的接口(interface)获取它,该接口(interface)将扩展 Service1Service2

根据您当前的设计,不可能仅对外部系统隐藏一种方法。

关于java - 如何从类中隐藏不支持的接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55544037/

相关文章:

java - 使用 Point3d 但需要自己访问 x,y,z 坐标

java - 如何强制所有 Java 类都具有属性

java - 从Mojo获取多模块maven项目的根目录

interface - 在 Typescript 中混合接口(interface)

java - 界面设计: Serializing Java Graphics to D3. js

c# - 类型 null 不可分配给类型 IJobDetails(这是我的接口(interface))

java - 为什么 while 语句中会抛出错误?

java - 正确使用 MVC 模式在 Swing 中使用数据填充 Jlist

python - 是否可以在 Xcode 或等效程序中创建基于 Python 的应用程序?

java - Integer 扩展 Number 但无法对 <?用 Integer 扩展 Number>