سؤال

عندما أحاول الإعلان عن قاموس على هذا النحو:

private Dictionary<String, int> map;

يعطيني المحول البرمجي الخطأ التالي:

خطأ في بناء الجملة على الرمز "int"، الأبعاد المتوقعة بعد هذا الرمز المميز

لكنه يعمل بشكل جيد مع Integer. وبعد أنا أدرك غامضة أن جافا يعامل int / Integer بشكل مختلف (لقد جئت من خلفية .NET)، لكنني كنت آمل أن يعطيني شخص ما شرحا كاملا على السبب لا أستطيع استخدام البدائيات في القاموس <>

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

المحلول

في جاوة البدائية ليست كائنات، لذلك لا يمكنك استخدامها بدلا من الكائنات. ومع ذلك، سيقوم Java تلقائيا / Unbox Primitives (AKA الاسترجة) إلى كائنات حتى تتمكن من فعل أشياء مثل:

List<Integer> intList = new LinkedList<Integer>();
intList.add(1);
intList.add(new Integer(2));
...
Integer first = intList.get(0);
int second = intList.get(1);

ولكن هذا هو حقا مجرد مترجم محول تلقائيا لأنواع لك.

نصائح أخرى

في .NET، يتم دعم أنواع "البدائية" بالأشياء. في جافا، هناك تمييز شاق بين الأنواع والكائنات البدائية. قدمت Java 5 التمثال التمهيدي، والتي يمكنها إكراه بين الاثنين في بعض الحالات. ومع ذلك، نظرا لأن نظام Java Generics يستخدم محو النوع، لا توجد معلومات كافية من Autobox في هذه الحالة.

مجموعات Java تسمح فقط بالمراجع غير بيئيتين. تحتاج إلى استخدام فصول التفاف (في هذه الحالة java.lang.inger) للقيام بما أنت عليه بعد:

private Dictionary<String, Integer> map;

انهم يمكنك القيام بأشياء مثل:

int foo = map.get("hello");

و

map.put("world", 42);

وتستخدم جافا التميري / إلغاء العلاج للتعامل مع تفاصيل التحويل لك.

هنا هو وصف بسيط على ذلك.

للتوسع في إجابة Tofubeer.

int هو بدائية

عدد صحيح هو كائن.

Generics لا يدعم البدائيات.

@XmlJavaTypeAdapter(value=MyAdapter.class, type=int.class)

هذه الحيلة تحدد النوع لجعله يعمل مع البدائيات

في المحول الخاص بك

باستخدام نفسه في معلومات الحزمة يعني أنك تفعل ذلك على مستوى العالم لهذه الحزمة

وجدت هذا بعد التجربة.

public class MyAdapter extends XmlAdapter<String, Integer> {

لأنه في جاوة البدائيات هي بدائريين حقا. في جاوة int سوف تمر بقيمة، في حين Integer سوف تمر مرجع. في .NET INT أو INT32 وما إلى ذلك هي مجرد أسماء مختلفة.

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