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

hok*_*sha 4 java class

我有功能

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)


Nic*_*tto 5

你有两件事要做:

  1. 更改方法的签名如下:

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

  2. 使用下面的方法动态地投射你的对象Class.cast

    return objectclass.cast(o);