Java 如何将类对象转换为泛型对象类型?
我正在研究一种使用Java 如何将类对象转换为泛型对象类型?,java,mysql,object,generics,jdbc,Java,Mysql,Object,Generics,Jdbc,我正在研究一种使用NamedParameterJdbcTemplate从MySQL数据库获取数据的方法。listCurrentRecords应该从数据库返回Customer、Product和SalesOrder的对象类型列表。objectType是从方法内部传递的参数(1 | | 2 | | 3)定义的,它在类的前面定义为公共变量 public static final int TYPE_PRODUCT = 1; public static final int TYPE_CUSTOMER = 2
NamedParameterJdbcTemplate
从MySQL数据库获取数据的方法。listCurrentRecords
应该从数据库返回Customer
、Product
和SalesOrder
的对象类型列表。objectType
是从方法内部传递的参数(1 | | 2 | | 3)定义的,它在类的前面定义为公共变量
public static final int TYPE_PRODUCT = 1;
public static final int TYPE_CUSTOMER = 2;
public static final int TYPE_SALESORDER = 3;
下面提供了该方法
public static List<Object> listCurrentRecords(int objectType)
{
// PRODUCT
if ( objectType == 1 ){
}
//CUSTOMER
else if ( objectType == 2 ){
}
// SALESORDER
else if ( objectType == 3 ){
}
return null;
// return new ArrayList<Object>();
}
在else if(objectType==2){}
中,我想调用getMyCustomer
方法并在那里获取List
。但是,方法listCurrentRecords
的返回类型是List
。如何从列表
转换为列表
。我提供了如下的伪代码
// customer
else if ( objectType == 2 ){
List<Customer> myCustomer = getMyCustomer();
// how to convert ***myCustomer*** to List<Object> ?
}
//客户
else if(objectType==2){
List myCustomer=getMyCustomer();
//如何将***我的客户***转换为列表?
}
我非常感谢您对如何用Java正确编写它的帮助。因为您需要
对象
类型(请记住泛型是一种编译时类型检查功能),所以您可以使用addAll
或占用第二个列表
的构造函数。像
List<Object> myCustomer = new ArrayList<>(getMyCustomer());
List myCustomer=newarraylist(getMyCustomer());
或
List<Object> al = new ArrayList<>();
// ...
al.addAll(getMyCustomer());
List al=new ArrayList();
// ...
al.addAll(getMyCustomer());
我可能会这么做
List<Object> myCustomer = new ArrayList<>(getMyCustomer());
List myCustomer=newarraylist(getMyCustomer());
这将通过迭代原始列表来创建一个新列表,因此根据列表的大小可能会比较慢
如果这是一个问题,另一种方法是
List<Object> myCustomer = Collections.unmodifiableList(getMyCustomer());
List myCustomer=Collections.unmodifiableList(getMyCustomer());
此版本通过包装原始列表来工作。如果您这样做,您将无法调用任何修改列表的方法(<代码>添加< /代码>,<代码> SET<代码>,<代码>删除< /代码>,<代码>清除/代码>等)。 您的
listCurrentRecords(int-objectType)
仍在您的控制之下,如果没有理由确实需要返回List
,您只需将其更改为公共静态列表listCurrentRecords(int-objectType)
实际上,在返回类型中使用通配符不是一个好主意。让我们更进一步,为什么不让listCurrentRecords
返回正确的列表呢?例如,与其传入整数,不如传入所需数据类型的类
,例如
public static <T> List<T> listCurrentRecords(Class<T> dataType)
有点离题了。。。你真的想继续使用这种设计吗?只是看起来不太对劲。一个超级方法,可以为您提供不同无关实体的“当前记录”?…谢谢您的回答。这些方法是在我正在开发的应用程序中定义的,但是,我将很快测试您的解决方案。对我来说,最后一个解决方案是有效的。我还在做这个项目,稍后我会提供更多的反馈。我不知道原因,两种解决方案都不适合我。我使用前面的答案如下,List al=new ArrayList();al.addAll(getMyCustomer());哦,好的。对不起,我的回答没有帮助。很高兴你找到了答案。没关系,我还在学习如何用Java编写完整的应用程序。实际上,前面的答案也提供了你的第一个答案。我使用的是Java 1.7,这可能是版本的问题?我的两个答案都应该适用于Java 1.7。实际上,第二个应该可以在Java1.5上使用,因为它不使用菱形。
public static <T> List<T> listCurrentRecords(Class<T> dataType)
List<Customer> = listCurrentRecords(Customer.class)