Class <t> .isAssignableFrom(Class <! - ? - > cls)的建议替代方案是什么?</t>

时间:2010-03-16 04:48:00

标签: java performance reflection

目前我正在对一段代码进行分析。在分析期间,我发现这个方法调用,

Class<T>.isAssignableFrom(Class<?> cls)

占用了整个时间。

因为这是一种来自反射的方法,与普通关键字或方法调用相比需要花费大量时间。我想知道这个方法调用是否有一些很好的替代方案?

3 个答案:

答案 0 :(得分:2)

  

“[我]检查班级类型   通过方法参数传入   看看类型是否匹配   资格“。

对我来说,这意味着应该需要method参数来实现特定的接口或从特定的类继承。请注意,界面可以是RandomAccess之类的标记。我意识到更改您的API可能不是一种选择。

答案 1 :(得分:2)

如果您有一个要检索其类的对象,则可以将其替换为:

obj instanceof ClassName

但我不会说它更快。实际上,我怀疑这会导致程序执行出现任何问题。不要过度优化。

答案 2 :(得分:2)

我不知道这是否会影响你,但我认为值得注意的是,在Java 5的早期,isAssignableFrom有significant performance problems后来被纠正了。我无法找到修复程序是否被反向移植到Java 5,但它确实进入了Java 6。

此外,Sun JVM Performance Wiki指出 Class.isInstance Class.isAssignableFrom instanceof 的效果相同。

因此,如果您使用的是Java 6或更高版本,那么 Class.isAssignableFrom 似乎没有替代方案,它将比现有的更快。