gpt4 book ai didi

java - 有没有办法检查某些生成的代码在不使用 Implements 关键字时是否遵循接口(interface)?

转载 作者:行者123 更新时间:2023-12-02 01:34:49 24 4
gpt4 key购买 nike

我有一些无法修改的生成代码。这也意味着,我无法将 Implements 关键字添加到类声明中。

我想实现一个可以获取该类实例的方法,并假设其中实现了许多方法。理想情况下,这应该由编译器强制执行

我可以在运行时使用反射来做到这一点。但我试图避免它,因为使用反射的缺点(性能、可读性……)。如果类不遵守接口(interface),我还必须处理运行时错误而不是编译器错误。

示例:

  public interface Foo {
boolean foo();
}

public class Bar {
// Doesn't implement Foo interface but adheres to it
boolean foo() {
return true;
}
}

public class Bar2 {
// Doesn't implement or adhere to interface
boolean bar() {
return false;
}
}

现在我有一些方法:

  public someMethod(Foo foo) {
System.out.println(foo.foo());
}

我可以这样调用:

  someMethod(new Bar()); // I want something similar to this that compiles, Bar adheres to Foo
someMethod(new Bar2()); // I'd like to have a compile-time error, Bar2 doesn't adhere to Foo

这在 Java 中可能吗?

最佳答案

将它们包装在一个实现接口(interface)的委托(delegate)类中。

class NiceFoo implements Bar {
private final Foo delegate;

NiceFoo(final Foo delegate) {
this.delegate = delegate;
}

@Override
void bar() {
delegate.bar();
}
}

如果您不介意样板文件,Lombok 可以帮助您。这与上面完全等效,并且会自动委托(delegate)添加到 Bar 的任何方法。如果 Foo 没有相关方法,您将收到编译时错误。

@AllArgsConstructor
class NiceFoo implements Bar {
@Delegate(types = Bar.class)
private final Foo foo;
}

关于java - 有没有办法检查某些生成的代码在不使用 Implements 关键字时是否遵循接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55378212/

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