لماذا هذه الفئة غير قابلة للتسلسل؟
-
20-09-2019 - |
سؤال
كنت أستخدم تنفيذ Mersenne-الإعصار في http://www.math.sci.hiroshima-u.ac.jp/~m-mat/mt/versions/java/mtrandom.java. كاستبدال انخفاض في الافتراضي java.util.Random
صف دراسي. ومع ذلك، فإن أربعة حقول (INT، المنطقي واثنين من البايت []) transient
. وبعد هذا يعني أنه لا يمكنني استقلار كائن من هذه الفئة دون تنفيذ وظائف مخصصة.
السؤال هو، هل هناك أي سبب تم وضع علامة على هذه الحقول عابرة؟ هل هناك أي كود موجود في هناك معلومات لن تحدث أي معنى عند قراءة الكائن من ملف؟ أزلت transient
معدل من الحقول ويبدو أنه يعمل بشكل جيد، لكنني لم أختبرها بشكل مكثف، وبالتالي قد تكون هناك حالات تنطوي عليها؟
شخصيا، لا أستطيع أن أرى لماذا، لأن كل ما يتم ذلك في الفصل هو حسابي.
المحلول
على الأرجح المنطق وراء صنع الكل الحقول غير الثابتة للفئة transient
كان بحيث MTRandom
فئة يبقى متوافقا ثنائيا java.util.Random
, ، والتي تمدد منها.
من الناحية النظرية، يمكنك تسلسل MTRandom
مثيل، وتغمرها ك Random
المثال وكل شيء سيعمل.
إذا كانت هذه الحقول ليست كذلك transient
, ، ثم سيتم تسلسلون ويصبحون غير متوافقين.
ومع ذلك، بقدر ما أستطيع أن أقول، لا ينبغي أن يسبب إزالة العابرين مشكلة بالنسبة لك.
نصائح أخرى
من التعليق على serialVersionUID
, يبدو أن المؤلف لا يرغب في النظر في التسلسل. إضافة transient
ربما قمعت بعض تحذيرات مترجم / IDE.