在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>'
。
我做错了什么?
答案 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());
你会得到:
假
真