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



在java反射教程页面上,示例有以下片段

if ((pType.length != 1) || 
    Locale.class.isAssignableFrom(pType[0].getClass())) { 
  continue; 
}

"此外,Class.isAssignableFrom()用于确定所定位方法的参数是否与所需调用兼容。"

我以为这个片段试图找到以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而不是Locale。这意味着if语句永远不会为真,因为Type的getClass()方法似乎总是返回Class

如果您向类中添加一个新方法,如下所示:

private boolean testBar2(int l) { return true; }

这将导致程序抛出IllegalArgumentException,因为即使类型不是Locale,它也会调用testBar2。

Type是一个接口,调用pType[0].getClass()要求获得pType[0]的类,即Class(而不是Locale),因为Class实现了Type接口。为了找出Type对象代表的类,我们只能使用它的toString方法,看看它是否是"类java.util.Locale",因为接口中没有特定于类型的方法。

总之,我认为他们对isAssignableFrom的使用在这里似乎是无效的,因此他们对其使用的讨论也是错误的。

我认为这可能是对的: if ((pType.length != 1) || !Locale.class.isAssignableFrom((Class<?>) pType[0])) { continue; }

相关内容

  • 没有找到相关文章

最新更新