【问题标题】:Clone new objects to pass to ArrayList?克隆新对象以传递给 ArrayList?
【发布时间】:2012-11-05 21:12:30
【问题描述】:

我正在构建一个 android 应用程序,并试图将对象添加到 ArrayList。我认为这会在ArrayList 中创建对象的副本,然后我可以重用该对象。我意识到事实并非如此,ArryList 实际上是在引用原始对象。

我不确定如何使用循环在onCreate 函数中创建新对象,所以我是否需要克隆该对象并将其传递给ArrayList

这是我的代码:

 public class Main extends Activity {
  private Item myItem = new Item();

  btnSave.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            alItems.add(myItem);
            arrayAdapter.notifyDataSetChanged();

【问题讨论】:

    标签: java android events


    【解决方案1】:

    您可以在Item 类中创建copy constructor,并使用它来创建对象的副本。

    public class Item {
        private int field1;
        public Item() { }
    
        public Item(Item item) {
           this.field1 = item.field1;
        }
    }
    

    并使用以下命令将您的对象添加到列表中:-

    alItems.add(new Item(myItem));
    

    【讨论】:

    • Brilliant 不了解复制构造函数,但它很有效!
    【解决方案2】:

    然后让你的Item 实现Clonable

    public void onClick(View v) {
            alItems.add(myItem.clone());
            arrayAdapter.notifyDataSetChanged();
    

    【讨论】:

    • 复制构造函数比使用clone 方法更好。看看Effective Java - Item # 11
    • @RohitJain 我在我的环境中使用了复制构造函数,但迁移到了克隆,它大大简化了实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多