基于数组的Java克隆类

基于数组的Java克隆类,java,arrays,class,Java,Arrays,Class,我有一个叫做NewClass的类,在这个类中我有另一个叫做people的类。我想克隆people类,让它们具有不同的值和名称;但是,我希望这些类基于字符串数组命名 假设我有一个包含5个单词的字符串数组: String[] array = new String[] { "first", "second", "third", "fourth", "fifth" }; 我有一个带有一些变量的类,比如: class people { String name; int id; } 是否

我有一个叫做NewClass的类,在这个类中我有另一个叫做people的类。我想克隆people类,让它们具有不同的值和名称;但是,我希望这些类基于字符串数组命名

假设我有一个包含5个单词的字符串数组:

String[] array = new String[] { "first", "second", "third", "fourth", "fifth" };
我有一个带有一些变量的类,比如:

class people
{
    String name;
    int id;
}
是否可以克隆或创建一个新类,使用“people”作为模型,并使用数组中的字符串?到目前为止,我已经尝试过了,但它不起作用:

for (int i = 0; i < array.length; i++)
{
    people array[i] = new people();
}

您真的应该阅读Java教程

您的代码在很多层面上都是错误的(首先是不遵循Java命名约定,不正确地使用技术术语
clone
将字符串数组转换为其他对象数组),很难给出一个简洁的答案

真的,请阅读Java教程。他们会告诉你如何制作一个
People[]
数组。或者更好:一个
ArrayList


通过阅读一本写得很好的教程或书,你将学到比你在这里期望得到的简短答案多得多的东西。请参阅:教程和书籍通常由专业教师编写。

您不能基于字符串动态设置变量名。您已经向我们展示了一个更好的示例—创建一个“people”类数组并用“people”对象填充它(Java最佳实践建议在类名的开头使用大写)。通过迭代字符串数组,您可以在用于实例化所有“people”对象的同一循环中轻松设置“people”类的“name”字段。然后,只需知道要检索的“people”对象的索引即可

peopleArray = new people[array.length];

for (int i = 0; i < array.length; i++)
{
    peopleArray[i] = new people();
    peopleArray[i].name = array[i];
}

您可以通过为“people”类编写构造函数来简化它

我不确定您到底想做什么。但是,如果您真的想基于字符串动态设置变量名,则需要一个HashMap。 这里有一个例子

import java.util.HashMap;

class Person {
    private String name;
    private int id;

    public Person(String name, int id) {
        this.name = name;
        this.id = id;
    }

    @Override
    public String toString() {
        return "Person - name = " + name + ", id = " + id;
    }
}

public class MyClass {
    private static HashMap<String, Person> people = new HashMap<>();

    public static void main(String[] args) {
        String[] keys = { "first", "second", "third", "fourth", "fifth"};
        String[] names = { "Emily", "Bob", "Susan", "Bill", "Alice"};
        int[] ids = {1, 2, 3, 4,5};
        for(int i = 0; i < keys.length; i++) {
            Person p = new Person(names[i], ids[i]);
            people.put(keys[i], p);
        }

        System.out.println(people.get("first"));
        System.out.println(people.get("second"));
    }
}
import java.util.HashMap;
班主任{
私有字符串名称;
私有int-id;
公共人物(字符串名称,整数id){
this.name=名称;
this.id=id;
}
@凌驾
公共字符串toString(){
返回“Person-name=“+name+”,id=“+id;
}
}
公共类MyClass{
私有静态HashMap people=newhashmap();
公共静态void main(字符串[]args){
字符串[]键={“第一”、“第二”、“第三”、“第四”、“第五”};
String[]name={“Emily”、“Bob”、“Susan”、“Bill”、“Alice”};
int[]id={1,2,3,4,5};
for(int i=0;i

但我怀疑你是否真的需要这样做。也许您只需要将人名设置为数组中的字符串。在这种情况下,您不需要HashMap。

更具体一些。我想,你想实例化people类,而不是克隆它?如果是这样的话,您需要提供getter/setter或适当的构造函数来设置name变量。如果我正确理解了这个问题,您可能想要一本关于基本Java编程的书,其中描述了类对象和构造函数的使用。话虽如此,您还是希望在People中创建一个构造函数来接受名称中的字符串输入,并调用People array[i]=new People(array[i]);这是误导。实际上,您并不是“基于字符串动态设置变量名”。您只是在
HashMap
a
字符串中创建键。这两个概念之间有很大的区别。
System.out.println(peopleArray[index].name);
import java.util.HashMap;

class Person {
    private String name;
    private int id;

    public Person(String name, int id) {
        this.name = name;
        this.id = id;
    }

    @Override
    public String toString() {
        return "Person - name = " + name + ", id = " + id;
    }
}

public class MyClass {
    private static HashMap<String, Person> people = new HashMap<>();

    public static void main(String[] args) {
        String[] keys = { "first", "second", "third", "fourth", "fifth"};
        String[] names = { "Emily", "Bob", "Susan", "Bill", "Alice"};
        int[] ids = {1, 2, 3, 4,5};
        for(int i = 0; i < keys.length; i++) {
            Person p = new Person(names[i], ids[i]);
            people.put(keys[i], p);
        }

        System.out.println(people.get("first"));
        System.out.println(people.get("second"));
    }
}