سؤال

النظر من خلال بعض كود جافا وهذا لا يبدو صحيحا. بالنسبة لي ، يبدو أنه في كل مرة تتصل فيها بالمشاريع ، ستحصل على هاشم جديد ، بحيث يكون هذا البيان دائمًا خطأ

projects.get(soapFileName) != null

يبدو أنه يجب أن يكون له مجال دعم

public static HashMap<String,WsdlProject> projects = new HashMap<String,WsdlProject>();

public Object[] argumentsFromCallSoapui(CallT call, Vector<String> soapuiFiles, HashMap theDPLs,int messageSize)
{
    try {
        for (String soapFileName:soapuiFiles){
            System.out.println("Trying "+soapFileName);
            WsdlProject project ;
            if (projects.get(soapFileName) != null){
                project = projects.get(soapFileName);
            } else {
                project = new WsdlProject(soapFileName);
                projects.put(soapFileName,project);
            }
        }
    } ...
}
هل كانت مفيدة؟

المحلول

لا. في Java هذا المتغير الثابت يتم تهيئته مرة واحدة فقط.

لذلك ، سيتم استدعاء هذا الخط مرة واحدة فقط.

public static HashMap<String,WsdlProject> projects = new HashMap<String,WsdlProject> ();

نصائح أخرى

ال المشاريع سيتم تهيئة المتغير مرة واحدة ، عند تحميل الفئة الأولى.

بشكل عام ، تعتبر الخرائط الثابتة من هذا النوع فكرة سيئة: فهي غالبًا ما تتحول إلى تسرب الذاكرة ، حيث تمسك بالمداخلات التي تمر لفترة طويلة.

في هذه الحالة بالذات ، أشعر أيضًا بالقلق بشأن سلامة الخيط. إذا كان لديك عدة مؤشرات ترابط تدعو هذه الطريقة (والتي من المحتمل أن تكون في التعليمات البرمجية التي تتعامل مع خدمات الويب) ، فستحتاج إلى مزامنة الوصول إلى الخريطة أو يمكنك إفسادها.

وفي ملاحظة أناقة عامة ، من الجيد تحديد المتغيرات باستخدام الفئة الأقل تقييدًا: في هذه الحالة ، الواجهة خريطة, ، بدلاً من الفئة الملموسة خريطة التجزئة.

لم تكن مكالمة projects - إنه حقل وليس طريقة.

نظرًا لأنه حقل ثابت ، فسيتم تهيئته مرة واحدة بالضبط (Modulo نفس النوع الذي يتم تحميله في متعددة من أدوات تحميل الفئات).

إذا قمت بإضافة initialiser ثابت (مُنشئ ثابت؟) ، فستتمكن من رؤية أن الإحصائيات يتم تهيئة فقط في المرة الأولى التي يتم فيها تحميل الفصل:

public class Hello {
    static { System.out.println("Hello static World!"); }

    ...
}

لن تحصل على hashmap جديد في كل مرة تستدعي طريقة في المشاريع ، إذا كان هذا ما تشير إليه. سيتم إنشاء HashMap الجديد مرة واحدة ، ولكن جميع حالات الفصل ستشارك HashMap واحد.

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