是否有必要在ArrayList中使用泛型?

时间:2014-12-22 15:29:42

标签: java generics

有必要使用ArrayList的泛型?像这样:

ArrayList<Object> software=new ArrayList<Object>();       

没有它可以写吗?因为当我想向它添加对象时我遇到了问题。

我尝试做的是从框架中获取信息,然后创建对象并将其添加到tha arraylist

class Listener implements ActionListener {
  public void actionPerformed(ActionEvent e) {
    ArrayList software= new ArrayList();

    String s = (String) major.getSelectedItem();

    if((e.getActionCommand()).equals("SAVE")){
      int st_id=Integer.parseInt(id.getText());
      String st_name=name.getText();
      String st_gender = (String) gender.getSelectedItem();
      String st_major = (String) major.getSelectedItem();
      String code1=code_sw1.getText();
      String code2=code_sw2.getText();
      String code3=code_sw3.getText();
      double mark1=Double.parseDouble(m_sw1.getText());
      double mark2=Double.parseDouble(m_sw2.getText());
      double mark3=Double.parseDouble(m_sw3.getText());
      St_Sw ob1=new St_Sw(st_id,st_name,st_gender,st_major,code1,code2,code3,mark1,mark2,mark3);
      software.add(ob1);
    }
  }
}

5 个答案:

答案 0 :(得分:4)

您的意思不是参数,它是一种通用类型。你可以这样做一个原始列表:

List list = new ArrayList();

它会正常工作但是在Java中引入泛型的全部意义在于修复&#34;原始列表。如果存储的对象不同于Object,那么当您例如遍历列表并在每个元素上调用一个方法时,它可能会出错。

答案 1 :(得分:2)

技术上 是没有必要的,你可以创建一个没有类型的ArrayList,并且一切正常。

话虽这么说,你应该认为这是必要的,每当你遇到你不必打字的情况时,你可能做错了什么。您可能需要研究多态/继承(http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29)或接口(http://docs.oracle.com/javase/tutorial/java/concepts/interface.html),以便可以在同一个ArrayList中存储多种类型的对象。

您想要键入所有ArrayList的主要原因是Java会在您尝试错误时告诉您。起初,你可能会认为这导致了问题,并且让它停止对你大喊大叫总是比没有编译好。但实际上,如果Java对你大吼大叫,那么你做错了什么。

在您的情况下,似乎arrayList只包含St_Sw对象。如果是这种情况,您可能希望使用以下内容创建ArrayList:

ArrayList<St_Sw> software=new ArrayList<St_Sw>();

答案 2 :(得分:1)

从Java 7开始,您可以使用菱形运算符:

 ArrayList<Object> software=new ArrayList<>(); 

答案 3 :(得分:0)

Arraylist是一个动态数组,表示在向列表中添加新项目时会分配新内存。在创建arraylist之前无需定义大小。要添加对象,只需调用软件的添加方法。

答案 4 :(得分:0)

如前所述,

List list = new ArrayList();

但也是:

List<String> list = new ArrayList();

是Java中的有效代码,并且由于Java开始具有原始,非List等结构的非泛型类型,因此支持向后分隔的原因。泛型类型在编译时不提供类型检查的安全性,并且应该在新代码中避免使用(通常here更多)。

但是,您可以使用钻石类型推断来制作速记,在右侧放置一个“空”钻石。

在Java中,这个

List<String> list = new ArrayList<>();

等于这个

List<String> a = new ArrayList<String>();