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());
您将获得:
错误
正确
在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());
您将获得:
错误
正确