Java 列表的var参数作为方法参数
我有一个未知数量的列表(在我的示例中有两个,但可能有所不同): 与 正如我建议的那样,我删除了泛型Java 列表的var参数作为方法参数,java,Java,我有一个未知数量的列表(在我的示例中有两个,但可能有所不同): 与 正如我建议的那样,我删除了泛型 public void writeReportToExcel(List datas) { try { Bean2Excel oReport = new Bean2Excel(); for (int i = 0;i<datas.size();i++){ List data = (List)datas.get(i);
public void writeReportToExcel(List datas) {
try {
Bean2Excel oReport = new Bean2Excel();
for (int i = 0;i<datas.size();i++){
List data = (List)datas.get(i);
...
}
}
public void writeReportToExcel(列表数据){
试一试{
Bean2Excel oReport=新的Bean2Excel();
对于(int i=0;i参数的类型不同,T。您可以删除泛型定义,使它们实现一个公共接口
您必须使用var args吗?参数的类型不同,T。您可以删除泛型定义,使它们实现一个公共接口
您必须使用var args吗?为列表中的类型创建一个公共基类
如果Employee
和ObjectTest
继承自同一基类,则它应该可以工作。为列表中的类型创建一个公共基类
如果Employee
和ObjectTest
继承自同一个基类,它应该可以工作。如前所述,我将创建一个公共接口,比如说WritableToExcel
或其他什么,然后使用通配符:
public void writeReportToExcel(List<? extends WritableToExcel>... varArrayData) { }
public void writeReportToExcel(List如前所述,我将创建一个公共接口,比如说writeabletoexcel
之类,然后使用通配符:
public void writeReportToExcel(List<? extends WritableToExcel>... varArrayData) { }
public void writeReportToExcel(List应为方法中的指定类型。例如,此处的Employee或ObjectTest。
但一旦您在一个方法中定义了两种不同的类型,并尝试应用于名为varArrayData的列表[],compile将拒绝这样做,因为它无法确保T表示Employee.class或ObjectTest.class
如果确实要使用var args,请在方法签名中删除标记可能有效:
public void writeReportToExcel(List ... varArrayData ) {
...
}
或者,您可以将类型define放入类休假:
public class Bean2Excel<T>{
public void writeReportToExcel(List<T> ... varArrayData ) {
...
}
}
公共类Bean2Excel{
public void writeReportToExcel(列表…varArrayData){
...
}
}
希望有帮助。应该是方法中的指定类型。例如,此处的Employee或ObjectTest。
但一旦您在一个方法中定义了两种不同的类型,并尝试应用于名为varArrayData的列表[],compile将拒绝这样做,因为它无法确保T表示Employee.class或ObjectTest.class
如果确实要使用var args,请在方法签名中删除标记可能有效:
public void writeReportToExcel(List ... varArrayData ) {
...
}
或者,您可以将类型define放入类休假:
public class Bean2Excel<T>{
public void writeReportToExcel(List<T> ... varArrayData ) {
...
}
}
公共类Bean2Excel{
public void writeReportToExcel(列表…varArrayData){
...
}
}
希望有帮助。你能给我们看一下编译器的消息吗?这些List
s也将是一种不同的类型吗?如果是,你必须指定一个通用的超类型,而不是T
。你能给我们看一下编译器的消息吗?这些List
s也将是一种不同的类型吗?如果是,你将必须指定一个公共超类型,而不是T
。它们可以是任何类型,是的,我必须使用var args,除非不可能这样做。它们可以是任何类型,是的,我必须使用var args,除非不可能这样做。如果X
是Employee
的超类,那么List
w我不会是List
的超类型。不。如果X
是Employee
的超类,那么List
将不会是List
的超类型。正如你建议的那样,我删除了泛型标记,这无疑是一种肮脏的方式,但它确实有效!是的,它有帮助!正如你建议的那样,我删除了泛型标记,它是w毫无疑问,这是一种肮脏的方式,但它是有效的,是的,它有帮助!
public void writeReportToExcel(List ... varArrayData ) {
...
}
public class Bean2Excel<T>{
public void writeReportToExcel(List<T> ... varArrayData ) {
...
}
}