我有一个树结构,其中一些节点必须只包含实现特定接口的对象。但是存在扩展该接口的接口,并且实现它们的对象不应该包含在节点中。
所以我需要检查对象是否严格实现了特定的接口。
public interface IProcessCell {...}
public interface IMethodCell extends IProcessCell {...}
IProcessCell processInstance = new IProcessCell() {...}
IMethodCell methodInstance = new IMethodCell() {...}
/** Method implementing desired check */
public boolean check(IProcessCell instance) {...}
方法检查必须对processInstance返回true,但对于methodInstance
则返回false答案 0 :(得分:3)
您可以使用http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getInterfaces()
但对我来说,你要做的事就是修补写得不好的应用程序。对我来说,更好的方法是创建一个新的接口(只有期望的对象将实现),并使“树结构”节点需要特定的接口。
答案 1 :(得分:2)
您可以使用getInterfaces获取已实现接口的列表。
假设您已将实例投放到所需的界面,则只需测试yourInstance.getClass().getInterfaces().length==1
答案 2 :(得分:1)
Class实现了getInterfaces()方法。它返回一个Class []。使用此方法,您可以迭代并进行比较,直到找到或找不到为止。 http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getInterfaces()
答案 3 :(得分:0)
您可以在节点上执行getClass().getInterfaces()
,然后遍历返回的类并检查从您关注的特定接口可分配的数量。所以如果你有:
interface A {
}
interface B extends A {
}
class NodeA implements A {
}
class NodeB implements B {
}
如果您正在寻找一个只能实现A的节点实例,那么您应该能够:
new NodeA().getClass().getInterfaces();
new NodeB().getClass().getInterfaces();
并且在每种情况下检查1)其中一个接口是A,并且2)A.class.isAssignableFrom(interface)
对于其他返回的接口返回false。