【问题标题】:Java - clone class based on arrayJava - 基于数组的克隆类
【发布时间】:2013-12-31 13:48:13
【问题描述】:

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

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

String[] array = new String[] { "first", "second", "third", "fourth", "fifth" };

我有一个包含一些变量的类,例如:

class people
{
    String name;
    int id;
}

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

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

另外,如何从“NewClass”外部访问这些类;可以这样访问吗:

class OtherClass
{
    NewClass myclass = new NewClass();
    System.out.println(myclass.first.name);
}

【问题讨论】:

  • 更具体。我猜,你想实例化 people 类,而不是克隆它?如果是这种情况,您需要提供 getter/setter 或适当的构造函数来设置 name 变量。
  • 如果我对这个问题的理解正确,您可能想要一本关于基本 Java 编程的书,其中描述了类对象和构造函数的使用。话虽如此,您可能希望在 People 中创建一个构造函数来接受输入名称的字符串,并调用 people array[i] = new people(array[i]);

标签: java arrays class


【解决方案1】:

您真的应该阅读 Java 教程。

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

真的,阅读 Java 教程。他们会告诉你如何制作People[] 数组。甚至更好:ArrayList&lt;People&gt;

通过阅读编写良好的教程或书籍,您将学到更多,而不是您可以从这里获得的简短答案。请参阅:教程和书籍通常由专业教学的人编写...

【讨论】:

    【解决方案2】:

    您不能根据字符串动态设置变量名称。您已经向我们展示了一个更好的示例——创建一个“人”类数组并用“人”对象填充它(Java 最佳实践建议在类名的开头使用大写字母)。您可以通过遍历字符串数组,在用于实例化所有“人”对象的同一循环中轻松设置“人”类的“名称”字段。那么它就像知道您要检索的“人”对象的索引一样简单。

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

    那么就:

    System.out.println(peopleArray[index].name);
    

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

    【讨论】:

      【解决方案3】:

      我不确定您到底想做什么。但是如果你真的想根据字符串动态设置变量名,你需要一个 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"));
          }
      }
      

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

      【讨论】:

      • 这是误导。您实际上并不是“基于字符串动态设置 [ting] 变量名称”。您只是在HashMapString 中创建密钥。这两个概念有很大的不同。
      猜你喜欢
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多