gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:35:21 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com