等于上课不可能吗?

时间:2015-09-23 19:53:21

标签: java equals

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

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>'

我做错了什么?

4 个答案:

答案 0 :(得分:8)

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

那就是说,在这种情况下,警告是有用的。您要求type.getClass()返回的类对象是否等于文字String.class所代表的类对象。鉴于Type不是String的超类,我现在可以告诉你答案是错误的:Type类与String类不同。您的IDE试图告诉您相同的内容。

如果你想要弄清楚的是type instance 类型是否代表String类,那么你就不需要getClass()

String.class.equals(type)

答案 1 :(得分:2)

type.getClass()不返回由类型表示的类,而是返回 of 类型的类(它将是Type的一个实现的.class)。换句话说,如果&#34; Type&#34;是一个Class,然后type.getClass()将返回&#34; Class&#34;的Class对象。

您需要的是:

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

答案 2 :(得分:0)

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

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

由:

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

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

答案 3 :(得分:0)

如果要验证某个对象是否为字符串,则可以使用如下方法:

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

因此,如果您运行下一个代码行:

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

你会得到: