好了,
我有一个标记接口:
interface IPOJO {
}
然后我有一个类实现这个接口:
class MePOJO implements IPOJO {
}
现在假设我有一个class对象
持有类MePOJO的引用:
Class<MePOJO> classObj = MePOJO.class;
那么,我如何通过使用classObj
来确定MePOJO
类是否实现了IPOJO
?
正确的方法不是使用标记接口,而是使用注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public static @interface Pojo {
}
@Pojo
public static class MePojo {
}
public static void main(String[] args) throws Exception {
System.out.println(MePojo.class.isAnnotationPresent(Pojo.class));
}
输出:
true
这样就不会用标记接口污染名称空间。
有几种方法可以实现这一点。
或者使用您创建的对象的类类型并检索列表及其实现的所有接口。
MePOJO test = new MePOJO();
Class[] interfaces = test.getClass().getInterfaces();
for (Class c : interfaces) {
if ("IPOJO".equals(c.getSimpleName()) {
System.out.println("test implements IPOJO");
}
}
或者使用类#isAssignableFrom(类clazz)方法:
Class<?> clazz = MePOJO.class;
System.out.println(IPOJO.class.isAssignableFrom(clazz));
您应该使用Class#isAsSignablefrom(Class
Class<?> classObj = MePOJO.class;
System.out.println(IPOJO.class.isAssignableFrom(classObj));
输出:
true
我在TypeScript中使用一个接口来定义一个函数,该函数仅在扩展基类的一些类上可用。这是我到目前为止的代码的简化版本: 现在,问题是我会添加更多的“行走”动物,这样移动动物的功能就会变得太大而无法控制。我想做的事情是这样的: 但是,“implements”检查不起作用,在使用接口时,我找不到与“instanceof”等效的。在Java中,“instanceof”的使用似乎可以在这里使用,但Ty
问题内容: 如何检查某个类是否实现接口?当有: 如何检查是否实现接口? 该方法是否被正确覆盖,因此可以返回新创建的方法? 问题答案: 对于一个实例 然后做 对于Class实例
问题内容: 所以我在Java中有这个课程: 在这个类中,我想知道T是否实现某些接口。 以下代码不起作用,但这是我要完成的工作的主意: 所以我想检查传递给Foo 的类是否具有其签名。 可能吗?怎么样? 问题答案: 奇怪的是,泛型也用于接口。1您将要使用: 这实际上是实现的要求, 而不是true / false check 。 为了进行真/假检查,请使用无限制的generics()并确保获得a,以便您
问题内容: 我已经读过“ EffectiveGo”和其他类似的问答:golang接口符合性编译类型检查,但是我仍然无法正确理解如何使用此技术。 请参见示例: 如果实现了接口,是否有任何简单的方法(例如,不使用反射)检查值? 问题答案: 如果您不知道值的类型,则只需检查值是否实现了接口。如果类型已知,则该检查由编译器自动完成。 如果您仍然想进行检查,则可以使用您提供的第二种方法进行检查: 在编译时会
我试图使用反射来确定传入类是否实现了接口: 这是确定这一点的最佳/最有效的方法吗?我还看到一个
问题内容: 我正在搜索一个给定值的切片: 在普通情况下,类型为。但是,例如,如果类型是一些自定义的,该怎么办? 问题答案: 感谢@CodingPickle评论,我提供了Go编程语言规范中的以下内容 等号运算符==和!=适用于可比较的操作数。 关于s和: 接口值是可比较的。如果两个接口值具有相同的动态类型和相等的动态值,或者两个接口值都为nil,则它们相等。 当类型X的值可比较并且X实现T时,非接口