返回类类型并将类类型作为参数

时间:2016-05-30 13:08:57

标签: java class

我有功能

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"。

2 个答案:

答案 0 :(得分:10)

您应该使您的方法通用并返回T的实例(而不是Class<T>的实例):

private <T> T readObject (ObjectInput in, Class<T> objectclass)

编辑:您还应更改if和演员表,如下所示:

if (objectclass.isInstance(o)) {
    return (T) o;
}

答案 1 :(得分:3)

您有两件事要做:

  1. 将方法的签名更改为下一个:

    private <T> T readObject (ObjectInput in, Class<T> objectclass) {

  2. 使用Class.cast动态投射对象:

    return objectclass.cast(o);