gpt4 book ai didi

java - 测试一个类/接口(interface)实现了哪些接口(interface)?

转载 作者:行者123 更新时间:2023-12-04 06:23:46 24 4
gpt4 key购买 nike

我想测试一个类/接口(interface)正在实现哪些接口(interface)。

所以我有一个基本的界面Adapter和一些基于它的接口(interface)(例如 PermissionsAdapter )。现在我得到一个类型为 Adapter 的变量现在我想获得基于Adapter的每个接口(interface)这个变量正在实现。

一个简单的实现:

import java.util.LinkedList;
import java.util.List;

public class Main {

private interface A { }
private interface BA extends A { }
private interface CA extends A { }

private interface X {}

private class IB implements BA { }
private class IC implements CA { }
private class IBC implements BA, CA { }
private class ICX implements CA, X { }
private class IBCX implements BA, CA, X {}

public Main() {
this.test(new IB());
this.test(new IC());
this.test(new IBC());
this.test(new ICX());
this.test(new IBCX());
}

private void test(A a) {
List<Class<? extends A>> result = this.getAdapterInterfaces(a);
System.out.print(a.getClass().getSimpleName() + "{");
for (Class<? extends A> class1 : result) {
System.out.print(class1.getSimpleName() + ", ");
}
System.out.println("}");
}

@SuppressWarnings("unchecked")
public List<Class<? extends A>> getAdapterInterfaces(A adapter) {
List<Class<? extends A>> result = new LinkedList<Class<? extends A>>();
Class<?>[] interfaces = adapter.getClass().getInterfaces();
for (Class<?> clazz : interfaces) {
if (A.class.isInstance(clazz)) {
result.add((Class<? extends A>) clazz);
}
}
return result;
}

public static void main(String[] args) {
new Main();
}
}

这里是 Adapter界面 APermissionsAdapter例如 BACA是另一个适配器。 X只是一个示例界面,列表不应包含。

结果:
IB{}
IC{}
IBC{}
ICX{}
IBCX{}

所以它似乎不起作用。现在我在 getAdapterInterfaces(A) 中的错误在哪里? ?我认为这是测试,但是如果一个类是 A 的特定类,我该如何测试? ?

费边

最佳答案

您的测试A.class.isInstance(clazz)是错的。它测试接口(interface)的类对象是否属于你的A。类型,它不是(它是类型 ClassObjectSerializableAnnotatedElementGenericDeclarationType (在 1.6 中),仅此而已)。

你想要Class.isAssignableFrom , 我认为。 (但请阅读文档。)

此外,您可能需要递归到父类(super class)和接口(interface),因为可能存在间接实现。

关于java - 测试一个类/接口(interface)实现了哪些接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259605/

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