是否有人知道是否有可能(是否有图书馆)知道JRE中是否包含Class<?>
变量?
这就是我想要的:
Class<String> stringClass = String.class;
System.out.println(TheMagickLibrary.isJREClass(stringClass)); // should display true
Class<AnyClass> anotherClass = AnyClass.class;
System.out.println(TheMagickLibrary.isJREClass(anotherClass)); // should display false
答案 0 :(得分:4)
我可以为您提供2种解决方案。
java.
,sun.
,com.sun.
Returns the class loader for the class. Some implementations may use null to represent the bootstrap class loader. This method will return null in such implementations if this class was loaded by the bootstrap class loader.
正如你所看到的,他们说“某些意义可能会归零”。这意味着对于这些实现clazz.getClassLoader() == null
意味着该类由引导类加载器加载,因此属于JRE。 BTW这适用于我的系统(Java(TM)SE运行时环境(版本1.6.0_30-b12))。
如果没有,请查看ClassLoader#getParent()
的文档:
Returns the parent class loader for delegation. Some implementations may use <tt>null</tt> to represent the bootstrap class loader. This method will return <tt>null</tt> in such implementations if this class loader's parent is the bootstrap class loader.
同样,如果当前的类加载器是引导程序,则某些实现将返回null。
最后,我建议采用以下策略:
public static boolean isJreClass(Class<?> clazz) {
ClassLoader cl = clazz.getClassLoader();
if (cl == null || cl.getParent() == null) {
return true;
}
String pkg = clazz.getPackage().getName();
return pkg.startsWith("java.") || pkg.startsWith("com.sun") || pkg.startsWith("sun.");
}
我认为99%的病例已经足够好了。