我有功能
private Class readObject (ObjectInput in, Class objectclass){
try {
Object o = in.readObject ();
if (o instanceof objectclass) {
return (objectclass)o;
}
} catch (Exception e) {
}
Run Code Online (Sandbox Code Playgroud)
在我的课上,我用以下方法调用此函数:
ObjectInput in = (..)
Type1 type = readObject (in, Type1.class);
(do something with type)
while(true){
Type2 type2 = readObject (in, Type2.class);
(do something with type2)
Run Code Online (Sandbox Code Playgroud)
基本上,readObject应该返回我作为参数的类,如果这是Object o的正确类型.您可以将其视为,我正在阅读的Type1,Type2和Type3对象,但如果我遇到Type3,我什么都不做.
我写的这段代码不能正常工作.例如,
Type1 type = readObject (in, Type1.class);
Run Code Online (Sandbox Code Playgroud)
给我警告"无法从Class转换为Type1".
Fed*_*ner 10
您应该使您的方法通用并返回T(而不是实例Class<T>)的实例:
private <T> T readObject (ObjectInput in, Class<T> objectclass)
Run Code Online (Sandbox Code Playgroud)
编辑:您还应该更改您if和您的演员,如下所示:
if (objectclass.isInstance(o)) {
return (T) o;
}
Run Code Online (Sandbox Code Playgroud)
你有两件事要做:
更改方法的签名如下:
private <T> T readObject (ObjectInput in, Class<T> objectclass) {
使用下面的方法动态地投射你的对象Class.cast:
return objectclass.cast(o);
| 归档时间: |
|
| 查看次数: |
4338 次 |
| 最近记录: |