我有一个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;
}
}
答案 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;}
}
将姓名与您的水果类联系起来。