关于java反射tutorial page ,该示例有此片段
if ((pType.length != 1) ||
Locale.class.isAssignableFrom(pType[0].getClass())) {
continue;
}
"Also, Class.isAssignableFrom() is used to determine whether the parameters of the located method are compatible with the desired invocation."
我认为该代码片段试图找到以 Locale 作为参数的方法。但是,它尝试查找 Locale.class.isAssignableFrom(pType[0].getClass()) 并跳过。有趣的是,该示例按照描述的方式工作,因为当 pType[0] 为 Locale 时,Locale.class.isAssignableFrom(pType[0].getClass()) 返回 false。
有谁知道为什么当 pType[0] 为 Locale 时 Locale.class.isAssignableFrom(pType[0].getClass()) 返回 false ,以及检查该方法的参数是否为 Locale 的正确方法是什么?
预先感谢您的帮助。
最佳答案
看起来这个例子有缺陷。对 Locale.class.isAssignableFrom(pType[0].getClass())
的调用返回 false,因为 Type.getClass()
返回 Class
> 而不是区域设置
。这意味着 if 语句永远不会为 true,因为 Type 的 getClass()
方法似乎总是返回 Class
。
如果你像这样向类添加一个新方法:
private boolean testBar2(int l) { return true; }
这将导致程序抛出 IllegalArgumentException,因为即使类型不是 Locale,它也会调用 testBar2。
Type
是一个接口(interface),调用 pType[0].getClass()
要求获取 pType[0]
的类,这是 Class
(不是 Locale
),因为 Class
实现了 Type
接口(interface)。要找出 Type
对象代表什么类,我们只能使用它的 toString
方法,看看它是否是“class java.util.Locale”,因为没有特定于 Type 的类型接口(interface)中的方法。
简而言之,我认为他们对 isAssignableFrom
的使用在这里似乎无效,因此他们关于其使用的讨论也是错误的。
关于java - 为什么 Locale.class.isAssignableFrom([locale type].getClass()) 返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22993790/