我有功能
private Class readObject (ObjectInput in, Class objectclass){
try {
Object o = in.readObject ();
if (o instanceof objectclass) {
return (objectclass)o;
}
} catch (Exception e) {
}
在我的课堂上,我用以下方法调用此函数:
ObjectInput in = (..)
Type1 type = readObject (in, Type1.class);
(do something with type)
while(true){
Type2 type2 = readObject (in, Type2.class);
(do something with type2)
基本上,readObject应该返回我作为参数的类,如果这是Object o的正确类型。您可以将其视为,我正在阅读Type1,Type2和Type3对象,但如果我遇到Type3,我什么都不做。
我写的这段代码不能正常工作。例如,
Type1 type = readObject (in, Type1.class);
给我警告"无法从Class转换为Type1"。
答案 0 :(得分:10)
您应该使您的方法通用并返回T
的实例(而不是Class<T>
的实例):
private <T> T readObject (ObjectInput in, Class<T> objectclass)
编辑:您还应更改if
和演员表,如下所示:
if (objectclass.isInstance(o)) {
return (T) o;
}
答案 1 :(得分:3)
您有两件事要做:
将方法的签名更改为下一个:
private <T> T readObject (ObjectInput in, Class<T> objectclass) {
使用Class.cast
动态投射对象:
return objectclass.cast(o);