目前我正在对一段代码进行分析。在分析期间,我发现这个方法调用,
Class<T>.isAssignableFrom(Class<?> cls)
占用了整个时间。
因为这是一种来自反射的方法,与普通关键字或方法调用相比需要花费大量时间。我想知道这个方法调用是否有一些很好的替代方案?
答案 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 似乎没有替代方案,它将比现有的更快。