class 不可能等于?

equals not possible for class?

在Java中,我有一个带有签名的函数,其中传入了一个类型:

public Object convert(Object object, Type type) {
}

在函数内部,我想确定 Type 是否为 String,但是当我这样做时

String.class.equals(type.getClass())

Android Studio 告诉我 'equals()' between objects of inconvertible types 'Class<capture of ? extends Type>' and 'Class<String>'.

我做错了什么?

这不是 javac 错误 — 这是您的 IDE 提供的警告(或错误,取决于您的设置)。

也就是说,在这种情况下,警告很有用。您在询问 type.getClass() 返回的 class 对象是否等于文字 String.class 表示的 class 对象。鉴于 Type 不是 String 的超 class,我现在可以告诉你答案是错误的:Type class 不一样作为 String class。您的 IDE 正试图告诉您同样的信息。

如果您要弄清楚的是 type 的类型 instance 是否代表字符串 class,那么您不需要getClass():

String.class.equals(type)

您必须在对象上使用 instanceof 而不是类型,替换为:

String.class.equals(type.getClass())

作者:

if(object instanceof String) {
   // do something
}

您不需要方法签名中的 Type 实例。

type.getClass()不是return类型所代表的Class,而是Class类型(其中将是 Type 的实现之一的 .class)。换句话说,如果 "Type" 是 Class,那么 type.getClass() 将 return "Class" 的 Class 对象。

您需要的是:

if (type == String.class) {
    ...
}

如果你想验证某个对象是一个字符串,那么你可以使用这样的方法:

public boolean isStringInstance(Object o) {
    return o instanceof String;
}

因此,如果您 运行 下面的代码行:

isStringInstance(new Type());
isStringInstance(new String());

您将获得:

错误

正确