gpt4 book ai didi

java - java 类上的接口(interface)

转载 作者:行者123 更新时间:2023-11-30 03:28:40 24 4
gpt4 key购买 nike

我正在编写一些代码,使用javax.xml.bind包来查找注释,例如@XMLElement@ XMLElementRef@XMLAttribute。所有这三个类都有一个 required() 方法,该方法返回一个 boolean 值,我需要检查该值。因此我这样做:

Boolean required;
for (Annotation anno : theAnnotations) {
if (anno.annotationType().equals(XmlElement.class)) {
required = ((XmlElement) anno).required();
}
else if (anno.annotationType().equals(XmlElementRef.class)) {
required = ((XmlElementRef) anno).required();
}
else if (anno.annotationType().equals(XmlAttribute.class)) {
required = ((XmlAttribute) anno).required();
}
}

这段代码看起来毫无用处的重复。我想在 XMLElementXMLElementRefXMLAttribute 上创建一个接口(interface),以指定这三个具有 required()方法。这样我就可以这样做:

for (Annotation anno : theAnnotations) {
required = ((MyInterface) anno).required();
}

显然我无权访问javax.xml.bind.annotation.XmlElementXMLElementRefXMLAttribute的源代码。有没有办法告诉编译器这些内置类实现了 MyInterface ?

我发现了以下 C# 问题:Create an Interface for existing classes?这看起来很接近,但我不确定我能否很好地阅读 C#,并且包装类的想法似乎不适合我的使用。

最佳答案

嗯,包装类的想法是适用的。下面是示例 Java 代码(将 XMLXML2 类视为不可修改):

class XML {
void commonMethod() {}
}
class XML2 {
void commonMethod() {}
}
// all code from here is under your control
interface XMLAdapter {
void commonMethod();
}
class XMLWrapper implements XMLAdapter {
private final XML impl;

XMLWrapper(XML impl) {
this.impl = impl;
}

@Override
public void commonMethod() {
impl.commonMethod();
}
}
class XMLWrapper2 implements XMLAdapter {
private final XML2 impl;

XMLWrapper2(XML2 impl) {
this.impl = impl;
}

@Override
public void commonMethod() {
impl.commonMethod();
}
}

关于java - java 类上的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29607092/

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