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)