أين تضع الأقواس لتحويل كائن مصبوب إلى نوع بدائي دون عدم وجود تلقائي؟

StackOverflow https://stackoverflow.com/questions/3909698

سؤال

مع Autounboxing ، سيعمل هذا البيان تلقائيًا:

int myPrimitive = (Integer) doIt();

ولكن إذا كنت أرغب في التحويل بشكل صريح من Integer إلى int هنا في سطر واحد ، أين يجب أن أضع الأقواس؟

هل كانت مفيدة؟

المحلول

إما أن يرفض المترجم الصناديق عدد صحيح لك ، أو أنك تفعل ذلك بنفسك - لا يمكن تجنب ذلك.

لذلك عليك أن تفعل إما

int myPrimitive = ((Integer) doIt()).intValue();

أو أكثر ببساطة ، التغيير doIt() لإرجاع int بما أنك تريد التعامل معها intS بدلا من (خالية) Integerس.

نصائح أخرى

يمكنك القيام بذلك:

int myPrimitive = (int) (Integer) doIt();

لكن كما قلت ، سيحصل unboxing التلقائي على ذلك من أجلك.

أ سيئ مثال على إظهار أن السلسلة يلقي العمل (لا تستخدم هذا الرمز أبدًا) :

Map notReallyAMap = (Map) (Object) new String();

الشيء الذي يتسلل إلى سلسلة ، هو أنه أينما كنت تستخدمه ، إما أن يكون الممثلون شرعيًا ، ويمكنك إزالة الوسطاء ؛ أو سوف يتسبب الممثلون ببساطة ClassCastException. لذا يجب ألا تستخدمه أبدًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top