创建一个类的Arraylist

时间:2013-08-12 15:59:59

标签: java

我有一个Arraylist list1(香蕉,橙色......),我有一个班级水果。 我想创建一个Arraylist list2,其元素是fruit的实例,实例的名称是list1的元素。我做了所有同名的事情但我需要每个实例的特定名称。在java中有可能吗? 我试过这个,但它对我不起作用

public class list {
   public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
       ArrayList<String> list1=new ArrayList<>();
       ArrayList<Fruit> list2=new ArrayList<>();
       list1.add("banana");
       list1.add("Orange");
       list1.add("strawberry");
       for (int i = 0; i < list1.size(); i++) {
          String className=list1.get(i);
           Class<?> clazz = Class.forName(className);
           Object obj = clazz.newInstance();
           list2.add((Fruit) obj);
       }
   }
}


public class Fruit {
    int price;
    String color;

    public Fruit() {
    }

    public int getPrice() {
        return price;
    }

    public String getColor() {
        return color;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public void setColor(String color) {
        this.color = color;
    }

}

enter image description here

3 个答案:

答案 0 :(得分:1)

您的代码将正常运行,您需要做的就是在类名之前包含软件包名称。像这样:

public class list {
   public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
       ArrayList<String> list1=new ArrayList<>();
       ArrayList<Fruit> list2=new ArrayList<>();
       String packageName = "some.package.name";
       list1.add("banana");
       list1.add("Orange");
       list1.add("strawberry");
       for (int i = 0; i < list1.size(); i++) {
          String className=list1.get(i);
           Class<?> clazz = Class.forName(packageName + "." + className);
           Object obj = clazz.newInstance();
           list2.add((Fruit) obj);
       }
   }
}

Java不知道你的意思是什么类,默认情况下它不会假设它是相同的包。您必须明确告诉它哪个数据包。 (除非它没有数据包名称,在这种情况下为packetName = ""

答案 1 :(得分:0)

首先,将此更改为ArrayList<Fruit> list2=new ArrayList<>();

ArrayList<? extends Fruit> list2=new ArrayList<? extends Fruit>();

然后试试这个:

Class<?> clazz = Class.forName(className);
Fruit obj = (Fruit)clazz.newInstance();
list2.add(obj);

答案 2 :(得分:0)

为什么不这样做:

ArrayList<String> list1 = new ArrayList<String>();
ArrayList<Fruit> list2 = new ArrayList<Fruit>();
list2.add(new Bannana());
list2.add(new Orange());
list2.add(new Strawberry());
for (int i = 0; i < list2.size(); i++) {
   String className=list2.get(i).getClass().getSimpleName();
   list1.add(className);
}

创建类,然后检索类名以填充名称数组。

我建议的不仅仅是创建一个水果类,其中包含水果名称的吸气剂和固定剂。有点像...

public class Fruit{
    private String name;
    //other stuff... nutrition maybe?
    public String getName(){return this.name;}
    public void setName(String name){this.name = name;}
}

将姓名与您的水果类联系起来。