使用 Java 传递具有动态属性的 Parceled 对象的值时使用 indexOf 的技术?

Technique for using indexOf when working with Java pass by Value for Parceled Object with dynamic properties?

当特定对象的所有属性都在动态变化(即不保证创建后相同)时,可以实现什么样的技术才能使用默认的 ArrayList indexOf

假设我有一个名为 DataManager 的 class,它跟踪静态 ArrayList 中的 Car 对象。

public class DataManager {
   public static ArrayList<Car> carList = new ArrayList<>();
}

在Activity1中,我在carList中添加了一个Car Object,然后将Car打包发送给Activity2使用。

public Activity1 extends Activity {
   protected void onCreate(....) {
      Car originalCar = new Car("Red","0");
      DataManager manager = new DataManager();
      manager.carList.add(originalCar);
      Intent i = new Intent(Activity1.this, Activity2.class);
      i.putExtra("parcelledCar",originalCar);
      startActivity(i);
   }

因为Java在Activity2中接收car对象时按值传递,创建了一个新的对象,hashCode不会和原来的对象一样,防止Java.Object .equals() 正确比较。

   public Activity2 {
       protected void onCreate(....) {
          Car parcelledCar = intent.getParcelableExtra("parcelledCar");

          DataManager manager = new DataManager();
          manager.carList.indexOf(parcelledCar); // RETURNs -1 
          // because the (.equals inherited from Java.Object compares
          // addresses which are not the same)
       }
   }

我意识到在这种情况下覆盖默认的 .equals() 可能会有所帮助,但我不确定如果不能保证 Car 对象的所有属性在整个应用程序生命周期中保持不变,如何比较对象循环。

例如:

     public class Car {
          private String colour; 
             // Different cars can have the same colour
          private int timesDriven;
            // Value is dynamic and subject to change throughout application
     }

在数据库中使用类似 GUID 的东西会很好,但在我的特定用例中 我没有使用数据库 而且我不知道有任何内置 android 用于创建类似标识符的 GUID 的实用程序,该标识符在对象的分块实例中保持不变(如果有意义的话)?

Activity2收到的Car对象与原来的Car对象不是同一个实例与Java路过无关-价值。这是由 Android 完成的 serialization/parcel 造成的。 Java 按值传递会将 reference 按值传递给对象,但它将是 same 对象实例。

如果 Car 对象总是首先在 DataManager 中创建,那么您可以向 Car 对象添加一个 id 字段,并使用赋值AtomicIntegerDataManager 维护。然后,您将 List 替换为 idCar 对象的 Map

现在您可以在活动之间发送 id,然后查找 Car 对象。

基本上,您已经将 DataManager 变成了一个简单的内存数据库。