通用与类<?>



你好,我正在使用反射进行一些测试。。。到目前为止,我得到了这个:

public class MyConveter implements Converter {
private Class<?> myClass;
public MyConveter(Class<?> myClass) {
    this.myClass = myClass;
}
@Override
public boolean canConvert(Class clazz) {
    return clazz.equals(myClass);
}
@Override
public void marshal(Object arg0, HierarchicalStreamWriter arg1, MarshallingContext arg2) {
    // TODO Auto-generated method stub
}
@Override
public Object unmarshal(HierarchicalStreamReader arg0, UnmarshallingContext arg1) {
    try {
        Object obj = myClass.newInstance();
        Field daoField = myClass.getDeclaredField("id");
        daoField.setAccessible(true);
        daoField.set(obj, Integer.valueOf(5));
        Field daoField2 = myClass.getDeclaredField("value");
        daoField2.setAccessible(true);
        daoField2.set(obj, "proj name");
        return obj;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    return null;
}

}

但我不喜欢结果是不是有一种方法可以将其更改为:

public class MyConveter<T> implements Converter;

从而删除构造函数?

您可以随心所欲地用类型参数声明类;但是,您确实需要尝试转换的类的实例(因为它在unmarshal方法中使用)。编译类后,泛型中的所有类型信息都会被删除,因此运行时无法知道为哪个类创建新实例。

不,除非您更改,否则您无法做到这一点

@Override
public boolean canConvert(Class clazz) {
}

打电话。您对的更改

public class MyConveter<T> implements Converter;

将与api的更改齐头并进。

另外,基本上,当使用像这个类这样的泛型时,你只是说你没有定义任何特定的对象,可以是任何东西(任何对象或其子类)

阅读Effective java或Angelika Laker常见问题解答,了解更多详细信息。

相关内容

  • 没有找到相关文章

最新更新