我有未知数量的列表(在我的示例中为两个,但可能会有所不同):
SimpleDateFormat sdf = new SimpleDateFormat("yyyy, MM, dd");
List<Employee> employees = new ArrayList<Employee>();
employees.add(new Employee(100, "Abe Adams", sdf
.parse("2009, 12, 1"), 10000.00));
employees.add(new Employee(101, "Betty Barnes", sdf
.parse("2010, 11, 1"), 11000.00));
employees.add(new Employee(102, "Caleb Crown", sdf
.parse("2011, 10, 1"), 12000.00));
employees.add(new Employee(103, "Dirk Daniels", sdf
.parse("2012, 09, 1"), 13000.00));
Date date = new Date();
List<ObjectTest> objects = new ArrayList<ObjectTest>();
objects.add(new ObjectTest("name",date,10.0));
objects.add(new ObjectTest("name2",date,20.0));
我想将它们用作方法中的参数
oReport.writeReportToExcel(employees,objects);
与
public <T> void writeReportToExcel(List <T> ... varArrayData ) {
...
}
我必须使用 var args 参数,但编译器拒绝该代码 需要改变什么?
编译器的消息是
method writeReportToExcel in class Bean2Excel cannot be applied to given types;
required: List<T>[]
found: List<Employee>, List<ObjectTest>
reason: inferred type does not conform to equality constraint(s)
inferred: ObjectTest
equality constraint(s): ObjectTest, Employee
where T is a type-variable:
T extends Object declared in method <T> wirteReportToExcel(List<T> ...)
编辑解决方案(这可能是一种肮脏的方式)
Bean2Excel oReport = new Bean2Excel();
List recapList = new ArrayList();
recapList.add(employees);
recapList.add(objects);
oReport.writeReportToExcel(recapList);
按照建议,我删除了泛型
public void writeReportToExcel(List datas) {
try {
Bean2Excel oReport = new Bean2Excel();
for (int i = 0;i<datas.size();i++){
List data = (List)datas.get(i);
...
}
}
最佳答案
参数的类型不同,T。您可以删除通用定义或使它们实现公共(public)接口(interface)。
必须使用 var args 吗?
关于java - 列表的 var 参数作为方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24410135/