Java 当某个生成的代码未使用implements关键字时,是否有方法检查该代码是否符合某个接口?
我有一些生成的代码无法修改。这也意味着,我不能将implements关键字添加到类声明中 我想实现一个方法,该方法可以获取该类的一个实例,并假设在那里实现了许多方法。理想情况下,这应该由编译器强制执行 我可以在运行时使用反射来实现这一点。但是我试图避免它,因为使用反射的缺点(性能、可读性等等)。我还必须处理运行时错误,而不是编译器错误,以防类不符合接口Java 当某个生成的代码未使用implements关键字时,是否有方法检查该代码是否符合某个接口?,java,interface,code-generation,Java,Interface,Code Generation,我有一些生成的代码无法修改。这也意味着,我不能将implements关键字添加到类声明中 我想实现一个方法,该方法可以获取该类的一个实例,并假设在那里实现了许多方法。理想情况下,这应该由编译器强制执行 我可以在运行时使用反射来实现这一点。但是我试图避免它,因为使用反射的缺点(性能、可读性等等)。我还必须处理运行时错误,而不是编译器错误,以防类不符合接口 class NiceFoo implements Bar { private final Foo delegate; Nice
class NiceFoo implements Bar {
private final Foo delegate;
NiceFoo(final Foo delegate) {
this.delegate = delegate;
}
@Override
void bar() {
delegate.bar();
}
}
例如:
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中可能吗?将它们封装在一个委托类中,该类实现了接口
class NiceFoo implements Bar {
private final Foo delegate;
NiceFoo(final Foo delegate) {
this.delegate = delegate;
}
@Override
void bar() {
delegate.bar();
}
}
如果你对样板文件不感兴趣,那就去龙目山营救吧。这完全等同于上述内容,并将自动委托添加到Bar的任何方法。如果Foo没有相关的方法,您将得到一个编译时错误
@AllArgsConstructor
class NiceFoo implements Bar {
@Delegate(types = Bar.class)
private final Foo foo;
}
将它们封装在一个实现接口的委托类中
class NiceFoo implements Bar {
private final Foo delegate;
NiceFoo(final Foo delegate) {
this.delegate = delegate;
}
@Override
void bar() {
delegate.bar();
}
}
如果你对样板文件不感兴趣,那就去龙目山营救吧。这完全等同于上述内容,并将自动委托添加到Bar的任何方法。如果Foo没有相关的方法,您将得到一个编译时错误
@AllArgsConstructor
class NiceFoo implements Bar {
@Delegate(types = Bar.class)
private final Foo foo;
}
“未使用implements关键字时实现接口…”如果未使用
implements
关键字,则根据定义不实现接口。您的意思是“碰巧与接口共享相同的方法签名”简短回答:否。您必须Bar实现Foo
。更准确的简短回答:您可以使用字节码工具开发人员是否知道“类Bar”有一个方法“Foo”,它与“接口Foo”中的方法“Foo”具有相同的签名?是否有许多这样的类“BarA”、“BarB”,它们都有一个方法“foo”(相同的签名),并且您本质上希望创建一个可以对每个“BarN”类进行操作的方法,即使这些类没有公共的对象层次结构(定义“foo”)?您也可以使用反射如果未使用implements关键字,则实现接口…”如果未使用implements
关键字,则根据定义,它未实现接口。您的意思是“与接口同时共享相同的方法签名”“简短回答:不。您必须Bar实现Foo
。更准确的简短回答:您可以使用字节码工具开发人员是否知道“类Bar”有一个方法“Foo”,它与“接口Foo”中的方法“Foo”具有相同的签名?”?是否有许多这样的类“BarA”、“BarB”,它们都有一个方法“foo”(相同的签名),并且您本质上希望创建一个可以对每个“BarN”类进行操作的方法,即使这些类没有公共的对象层次结构(定义“foo”)?您也可以使用反射。