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