コレクショントランジェントの宣言に何か問題はありますか? transient Map<String, Car> cars = new HashMap<>()
は、Owner
インスタンスで宣言されていますが、Car
クラスはシリアル化されていません。hasMapは、オブジェクトが非直列化された後にtransientが動作しないと宣言しました
プログラムが初めてOwner
インスタンスを実行すると、それはCar
を作成し、二度目のプログラムを実行するときしかし、Owner
が非直列化されたコレクションCars
、に挿入し、それが正しくCar
インスタンスを作成しますが、コレクションcars.put(key, object)
への追加時には、NullPointerException
の原因となります。また、デシリアライズ後に実行する場合にのみ、cars.containsKey(regNumIn)
はtrueまたはfalseを与える代わりに例外を発生させます。 Owner
が再作成された後の2回目の実行では、新しいhashMap
が作成されたようです。
hasCode()とequals()で何かする必要がありますか?私はそれらを宣言しなかった.Netbeans IDEによって自動的に宣言された場合、プログラムはまったく動作しない。
Javaの 'transient'キーワードは、フィールドをシリアル化しないことを示すために使用されます。デシリアライズの後、マップの代わりに 'null'があります – ByeBye