Java,匿名内部私有(private)接口(interface)的可访问性

标签 java eclipse interface strategy-pattern anonymous-inner-class

我已经在类中实现了策略模式,以根据输入执行执行。它工作正常,并且通过简单的方式调用。

public class MyObject {

private final Object input;
private final Strategy strategy;

public MyObject(final Object input, final Strategy strategy) {
    this.input = input;
    this.strategy = strategy;
}

private interface Strategy {
    public void execute(final Object input);
}

public static final class FirstStrategy implements Strategy {
    @Override
    public void execute(final Object input) {...}
}

public static final class SecondStrategy implements Strategy {
    @Override 
    public void execute(final Object input) {...}
}
<小时/>
new MyObject(null, new MyObject.FirstStrategy());

只要我输入 new MyObject(null, new MyObject),Eclipse IDE 的完整助手就会让我实现私有(private)接口(interface)。

enter image description here

选择此项会导致错误的结构,建议我创建一个类Strategy,因为它对其他类不可见。

new MyObject(null, new MyObject.Strategy() {
    @Override
    public void execute(Object input) {}
});

我知道匿名内部类型如何工作以及为什么会发生。这个问题很容易解决,将界面strategy的可见性更改为public - 但这与我想要的相反。我坚持不让客户使用任何其他实现,除了我通过 FirstStrategy 或 SecondStrategy 提供给他的实现。有没有办法摆脱这种自动完成建议来实现私有(private)接口(interface),并同时使用匿名内部类型仅公开有限的实现?

最佳答案

如果您只想允许特定子类,请为这些特定子类提供构造函数重载:

public MyObject(final Object input, final FirstStrategy strategy) {
  this(input, (Strategy) strategy);
}

public MyObject(final Object input, final SecondStrategy strategy) {
  this(input, (Strategy) strategy);
}

private MyObject(final Object input, final Strategy strategy) {
  // ...
}

关于Java,匿名内部私有(private)接口(interface)的可访问性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48978659/

相关文章:

java - 使用 DefaultTableModel 时刷新 JTable 中的数据

eclipse - 定制p2设置操作的工作示例

java - Eclipse 帮助,导入无法识别

c# - 通用列表的扩展方法

java - Clojure:实现有状态的 Java 接口(interface)

java - Dropbox Java : Use Proxy with authentication

java - 未调用自定义 Spring 注释

java - JAXB-Unmarshalling 期间的 ObjectFactory 角色是什么?

eclipse - 无法让 Subclipse 在 CentOS 工作站上运行

c# - 无法将 .Net ConcurrentDictionary<K,V> 转换为 IReadOnlyDictionary<K,V> 接口(interface)?