java - 为什么 Locale.class.isAssignableFrom([locale type].getClass()) 返回 false?

标签 java reflection types

关于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/

相关文章:

java - 模拟假定存在的私有(private)变量

ruby - 获取ruby中对象的方法

java - 如何避免使用反射来创建新实例

c# - 抛出 AmbiguousMatchException

c - C 中等效的代数数据类型

scala - Scala 中类型安全的完美二叉树

java - 异步方法抛出异常是否合理?

java - 如何在jsp页面中使用if条件比较两个字符串?

java - 我没有收到任何错误,那么为什么我的数据没有持久保存到数据库中?

C: 是否使用转换为 "outer"结构类型的指针访问嵌套结构的初始成员?