Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表的var参数作为方法参数_Java - Fatal编程技术网

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  )    {
           ...
   }
}