أين تضع الأقواس لتحويل كائن مصبوب إلى نوع بدائي دون عدم وجود تلقائي؟
-
29-09-2019 - |
سؤال
مع Autounboxing ، سيعمل هذا البيان تلقائيًا:
int myPrimitive = (Integer) doIt();
ولكن إذا كنت أرغب في التحويل بشكل صريح من Integer
إلى int
هنا في سطر واحد ، أين يجب أن أضع الأقواس؟
المحلول
إما أن يرفض المترجم الصناديق عدد صحيح لك ، أو أنك تفعل ذلك بنفسك - لا يمكن تجنب ذلك.
لذلك عليك أن تفعل إما
int myPrimitive = ((Integer) doIt()).intValue();
أو أكثر ببساطة ، التغيير doIt()
لإرجاع int
بما أنك تريد التعامل معها int
S بدلا من (خالية) Integer
س.
نصائح أخرى
يمكنك القيام بذلك:
int myPrimitive = (int) (Integer) doIt();
لكن كما قلت ، سيحصل unboxing التلقائي على ذلك من أجلك.
أ سيئ مثال على إظهار أن السلسلة يلقي العمل (لا تستخدم هذا الرمز أبدًا) :
Map notReallyAMap = (Map) (Object) new String();
الشيء الذي يتسلل إلى سلسلة ، هو أنه أينما كنت تستخدمه ، إما أن يكون الممثلون شرعيًا ، ويمكنك إزالة الوسطاء ؛ أو سوف يتسبب الممثلون ببساطة ClassCastException
. لذا يجب ألا تستخدمه أبدًا.
لا تنتمي إلى StackOverflow