1

我有一个树结构,其中一些节点必须只包含实现特定接口的对象。但是有接口扩展了该接口,并且实现它们的对象不应该包含在节点中。
所以我需要检查对象是否实现了严格的特定接口。

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

4

4 回答 4

3

您可以使用http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getInterfaces()

但对我来说,你想做的事情就像修补写得不好的应用程序。对我来说,更好的方法是创建一个新接口(只有所需的对象才会实现)并使“树结构”节点需要该特定接口。

于 2013-04-10T18:56:37.710 回答
2

您可以使用getInterfaces获取已实现接口的列表。

假设您已经将您的实例投射到所需的接口,您只需要测试它yourInstance.getClass().getInterfaces().length==1

于 2013-04-10T18:50:23.000 回答
1

类实现 getInterfaces() 方法。它返回一个类[]。使用它,您可以迭代并进行比较,直到找到或未找到。 http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getInterfaces()

于 2013-04-10T18:59:02.587 回答
0

您可以getClass().getInterfaces()在节点上执行 a ,然后遍历返回的类并检查有多少可以从您关心的特定接口分配。因此,如果您有:

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。

于 2013-04-10T19:06:21.433 回答