我试图使用反射来确定传入类是否实现了IsWdidget
接口:
public boolean isAWidget(Class<?> clzz) {
Class<?> runtimeClass = ClassLoader.getSystemClassLoader().loadClass(clzz.getName());
Class<?>[] impls = runtimeClass.getInterfaces();
for(Class<?> clz : impls)
if(clz.getName().equals(IsWidget.class.getName()))
return true;
return false;
}
这是确定这一点的最佳/最有效的方法吗?我还看到一个IsWidget。班isAssignableFrom(类
如果有类
对象,可以使用getInterfaces()
方法。
Class c[] = clzz.getInterfaces();
if(Arrays.asList(c).contains(IsWidget.class))
{
return true;
}
getInterface方法为您提供一个Class
数组,表示接口
。或者也可以使用isAsSignablefrom方法,如下所示:
IsWidget.class.isAssignableFrom(clzz);
如果您有一个Object
,您可以使用instanceof
方法。
1) 这毫无意义
Class<?> runtimeClass = ClassLoader.getSystemClassLoader().loadClass(clzz.getName());
任何课程都可以试试这个
Class<?> runtimeClass = ClassLoader.getSystemClassLoader().loadClass(clzz.getName());
System.out.println(runtimeClass == clzz);
你会得到
true
因此,如果您删除这一行并直接使用clzz,它已经更高效了
2) 试试这个
class X extends Thread {
}
public static void main(String[] args) throws ClassNotFoundException {
System.out.print(Arrays.toString(X.class.getInterfaces()));
}
你会得到
[]
这与func所做的类似,但实际上X实现了Runnable
3) 这是检查类是否实现了接口的非常有效的一行解决方案
System.out.print(Runnable.class.isAssignableFrom(X.class));
输出
true
我将使用isAssignableFrom
方法来确定IsWidget
是否为超级接口:
return IsWidget.class.isAssignableFrom(clzz);
引用上面链接的Javadoc:
确定此Class对象所表示的类或接口是否与指定的Class参数所表示的类或接口相同,或者是其超类或超接口。
问题内容: 我有一个对象。我想确定对象表示的类型是否实现特定的接口。我想知道如何实现? 我有以下代码。基本上,它所做的是获取指定包中所有类的数组。然后,我想遍历数组并将添加实现接口的Class对象添加到我的地图。问题是将一个对象作为参数。我无法实例化接口。所以我对此感到茫然。有任何想法吗? 问题答案: 您应该使用:
我有一个对象。我想确定对象表示的类型是否实现了特定的接口。我想知道这是如何实现的? 我有以下代码。基本上,它所做的是获取指定包中所有类的数组。然后,我想遍历数组并将实现接口的类对象添加到映射中。问题在于将对象作为参数。我无法实例化接口。所以我有点不知所措。有什么想法吗?
好了, 我有一个标记接口: 然后我有一个类实现这个接口: 现在假设我有一个持有类MePOJO的引用: 那么,我如何通过使用来确定类是否实现了?
问题内容: 我是Java泛型的新手,来自.NET世界,我习惯于编写这样的方法: 该方法接受通用类型的对象,并检查该对象是否实现通用接口的 特定 版本,在这种情况下为。 现在,在Java中,我可以执行以下操作: 但 Java并 没有 让我做 据我所知,由于类型擦除,通常在Java中,此类将由类对象处理,我们将执行以下操作: 但是由于我要检查的类型是通用接口,所以您不能这样做: 那么,如何在Java中
众所周知,Java8已经向Java开发人员介绍了函数式编程。 诸如比较器、可运行、可调用等接口都是功能性的。 定义如下:函数接口是只有一个抽象方法的接口。 但例如,同一接口的比较器有多个抽象方法: 那么,对于如何确定接口是否具有功能性,以便将其用作lambda表达式或方法引用的赋值目标,是否有任何严格的规则?
问题内容: 我正在开发一个应用程序(Quartz调度程序),其中有一个作业类负责实际执行工作,我们需要在Quartz调度程序中创建触发器时告知/传递作业类的名称。 我想为所有想使用该API的人提供一个扩展点(除了我将作为API的一部分提供的一些通用作业之外)。这个想法是创建一个(标记)接口,如果有人想将其类声明为调度程序作业类,那么他们要做的就是(声明)实现该接口。 我不确定如何找到合约之后的类(