Java 不浇铸加载

Java 不浇铸加载,java,Java,我有一个所有子类都扩展的父类。在父级中,我有一个方法“Load”,用于从数据库加载数据。我的问题是,如果我有一个接收类名和id的静态方法,我必须在从该方法获取对象时强制转换该对象 方法示例: public static <className> Load(Class<?> className, int id) { // Create instance form class name Parent object = createInstanceFromCla

我有一个所有子类都扩展的父类。在父级中,我有一个方法“Load”,用于从数据库加载数据。我的问题是,如果我有一个接收类名和id的静态方法,我必须在从该方法获取对象时强制转换该对象

方法示例:

public static <className> Load(Class<?> className, int id) {

    // Create instance form class name
    Parent object = createInstanceFromClass(className);

    // Populate object

    retrun object;
}
所以我想删除加载子对象时的额外强制转换

我用的是正确的方法吗?

试试这个

public static <T extends Parent> T Load(Class<T> className, int id){
    // create instance form class name
    Parent object= createInstanceFromClass(className);

    // populate object

    return (T) object;
}
publicstatict加载(类名,int-id){
//创建实例表单类名
父对象=createInstanceFromClass(类名);
//填充对象
返回(T)对象;
}

假设您是通过反射创建对象,这可能会起作用:

public static <T extends Parent> T load(Class<T> clazz, int id)
    throws IllegalAccessException, InstantiationException {
    T object = clazz.newInstance(); //createInstanceFromClass(className);
    //populate object...
    return object;
}
publicstatict负载(类clazz,int-id)
抛出IllegalAccessException,实例化Exception{
T object=clazz.newInstance();//createInstanceFromClass(类名);
//填充对象。。。
返回对象;
}
如果不想抛出任何选中的异常:

public static <T extends Parent> T load(Class<T> clazz, int id) {
    try {
        T object = clazz.newInstance(); //createInstanceFromClass(className);
        //populate object...
        return object;
    } catch (IllegalAccessException | InstantiationException e) {
        //handle the exception here...
    }
    return null;
}
publicstatict负载(类clazz,int-id){
试一试{
T object=clazz.newInstance();//createInstanceFromClass(类名);
//填充对象。。。
返回对象;
}catch(IllegalAccessException |实例化exception e){
//在这里处理异常。。。
}
返回null;
}

A
Class
对象不是类的名称。远不止这些。为什么称它为
className
?泛型是静态上下文,不能使用。如果您可以使该方法非静态,则可以使用泛型来完成。@rekaszeru:您可以,但不能使用类的类型参数。通用方法仍然可以正常工作。@user2357112你说得对,我在想一个办法。谢谢你指出这一点@LuiggiMendoza:不,我的意思是,如果您有一个带有静态
bar
方法的类
Foo
Foo.bar
没有访问
t
。您缺少
className
参数上的返回类型和
class
对象的类型
也可能需要更改。此代码将生成有关强制转换到泛型类不安全的警告。最好是
className.cast(object)
而不是
(T)object
.Lol。。对不起,伙计们。。我来修理。。是固定的
retrun
,ps Luiggi完全正确接受这个答案
public static <T extends Parent> T load(Class<T> clazz, int id) {
    try {
        T object = clazz.newInstance(); //createInstanceFromClass(className);
        //populate object...
        return object;
    } catch (IllegalAccessException | InstantiationException e) {
        //handle the exception here...
    }
    return null;
}