通用类列表

时间:2015-02-22 10:41:29

标签: java list generics arraylist

我有Example1Example2个类。我在每个班级中只添加了一个字段:

public class Example1 {
   private String test1;
   //setter and getter
}

public class Example2 {
   private String test2;
   //setter and getter
}

现在我需要将这两个类中的一个列表传递给方法。实际上我希望有一个方法可以接受来自这两个类的列表作为参数。我知道泛型类,但我不知道在这种情况下如何使用泛型类。谁能帮我? 提前谢谢。

更新: 例如,假设我有两个这样的方法:

public void workingMethod1(List<Example1> list){
}
public void workingMethod2(List<Example2> list){
}

事实上,我想结合这两种方法,并有一种方法。

2 个答案:

答案 0 :(得分:0)

免责声明:

  1. 我一直在喝酒,所以这可能充满了错别字。
  2. 我还没有做过很多java,并且在我当前的机器上没有它
  3. 我还没有跟上1.6以来的变化,所以可能会错过一些现代技术。
  4. 我会用两种方式来做这件事。一个是你要查看的两个类的公共类,另一个是重载你希望能够处理两个可能列表的方法。

    我也不明白为什么这里需要仿制药。

    接近1:

    public class BaseClass{
       // whatever
    }
    
    public class Example1 extends BaseClass{
       // whatever
    }
    
    public class Example2 extends BaseClass {
       // whatever
    }
    
    
    public void workingMethod(List<BaseClass> list){
       // whatever
    }
    

    或者,另一条路线,如果两个类别没有多少共同之处,那就是重载workingMethod方法:

    public class Example1{
       // whatever
    }
    
    public class Example2{
       // whatever
    }
    
    public void workingMethod(List<Example1> list){
      // do whatever to create the list needed to call the function you want
      List<Double> someCrap = new List<Double>();
      for(Example1 e1 : list){
        someCrap.add(e1.getRandomCrap());
      }
      commonWorkingMethod(someCrap );
    }
    
    public void workingMethod(List<Example2> list){
      // do whatever to create the list needed to call the function you want
      List<Double> etc = new List<Double>();
      // do more crap
      commonWorkingMethod(etc);
    }
    
    public void commonWorkingMethod(List<Double> list){
       // whatever
    }
    

答案 1 :(得分:-2)

我已根据上面的Spis建议创建了一个非常基本的代码示例。它只是骨架代码,没有任何功能。它只显示了方法和两个类中泛型的概念。

package test;

import java.util.ArrayList;
import java.util.List;


public class Test {
    public class Example1 {
    }

    public class Example2 {
    }

    public static void workingMethod1(List<? extends Object> list){

    }
    public static void workingMethod2(List<? extends Object> list){

    }
    public static void main(String[] args) 
    {   
        Test t = new Test();
        Example1 eg1 = t.new Example1();
        Example2 eg2 = t.new Example2();
        List<Example1> list1 = new ArrayList<Example1>();
        List<Example1> list2 = new ArrayList<Example1>();

        workingMethod1(list1);
        workingMethod2(list2);
    }
}