كيف يمكنني الوصول إلى الأساليب على أساس سلاسل في المصفوفة ؟

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

  •  20-08-2019
  •  | 
  •  

سؤال

مرحبا!

أنا حتى لست متأكدا إذا كان هذا ممكن, ولكن نأمل في جافا.وأنا أعلم أنني قد فعلت ذلك في PHP باستخدام متغير من المتغيرات و الوصول إلى متغير حيوي, ولكن قرأت هذا ليس ممكنا في جافا في سؤال مختلف.

لدي مجموعة من السلاسل التي تحتوي على الدولة من خانات الاختيار في JSF واجهة المستخدم الرسومية.إذا كان كل خانات يتم تعيين مجموعة سوف تكون مليئة السلاسل التي تحتوي على قيمة مختلفة خانات.

التسميات وقيم خانات يتم بناؤها من خلال حلقات من خلال مجموعة التي تبدو مثل هذا:

private static final String[][] OVERVIEW_FIELDS = {{"ID", "requestid"},
    {"Date added", "dob"}, {"Title", "requestTitle"}, {"Process", "processId"},
..., ..., ...};

ثم أعاد من خلال مجموعة وجعل JSF SelectItems من ذلك:

for (int i = 0; i < OVERVIEW_FIELDS.length; i++) {
    SelectItem item = new SelectItem(OVERVIEW_FIELDS[i][0], OVERVIEW_FIELDS[i][1]);
    getFields().add(item);
}

المشكلة و الحل الحالي (أمل شخص ما يمكن أن تساعدني ريفاكتور إلى شيء أفضل:

for (String item : getVisibleFields()) {
           if (item.equals("dob")) {
                setDob(true);
            }
            if (item.equals("requestTitle")) {
                setRequestTitle(true);
            }
            if (item.equals("processId")) {
                setProcessId(true);
            }
            if (...) {
            }
}

وهكذا استمر لمدة 11 المنطقية.أنا لا أحب هذا الحل ، وأنا أرى أنماط مماثلة في حبوب أخرى في النظام.

لا أحد يعرف إذا كان هناك حل أفضل من هذا ؟ القيم المنطقية التحكم في الأعمدة حيث ضبط المقدمة الميدانية إلى true/false وفقا لما خانة الاختيار يحتوي على مجموعة.

كنت آمل في JSF ش أتمكن من الوصول إلى visibleFields متغير و يحتوي على الأسلوب ، وبالتالي العودة إما true أو false إذا كان الكائن موجودا في مجموعة.هذا لا يبدو أن العمل على الرغم ش لا يعطيني الوصول يحتوي على الأسلوب.

أنا حاليا باستخدام:

rendered="#{overviewFilterBean.dob}"

و حاولت مع هذا الرمز:

rendered="#{overviewFilterBean.visibleFields.contains['dob']}">

الآن هذا قادني إلى محاولة استخدام النهائية مجموعة وتعيين القيم المنطقية وفقا getFields().contains(OVERVIEW_FIELDS[i][1]), ولكن كيف يمكنني جعل هذا ممكنا ؟

جزء حقيقي وجزء البرمجية الزائفة يلي (الحل كنت أسعى إلى الآن):

for (int i = 0; i < OVERVIEW_FIELDS.length; i++) {
    if (item.equals(OVERVIEW_FIELDS[i][1])) {
           setOVERVIEW_FIELDS[i][1](true);
       }
    }

السؤال الكبير:

هل هناك طريقة بالنسبة لي أن استخدام القيمة من OVERVIEW_FIELDS[i][1] لضبط الصحيح متغير منطقية أو يمكنني أن تتحول هذه الخريطة ربما واستخدام JSF ش للتحقق مما إذا كان المفتاح موجود في الخريطة ؟

شكرا لك على وقتك, و آسف على كتابة مثل هذا السؤال الطويل للوصول إلى نقطة صغيرة :/

تحرير:

انعكاس الأسلوب أدى إلى 5 الاستثناءات كتلة كبيرة من التعليمات البرمجية التعامل معها و أيضا قال الناس أن باهظة الثمن الأسلوب.هذا يقودني إلى الاعتقاد إما القديم حل أو باستخدام الخرائط هو أفضل وسيلة للقيام بذلك.سأحاول الخريطة الحل =)

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

المحلول

يمكنك دائما تخزين القيم في الخريطة بدلا من ذلك.ومع ذلك إذا كنت ترغب في استدعاء الأساليب على أساس methodname كسلسلة ، استخدام التفكير.انظر http://java.sun.com/developer/technicalArticles/ALT/Reflection/

نصائح أخرى

مع انعكاس, يمكنك القيام به:

for (String item : getVisibleFields()) {
    getClass().getMethod("get" + capitalize(item)).invoke(this, true);
}

معالجة الاستثناء ، capitalize طريقة ترك باعتبارها ممارسة القارئ (invoke يلقي الكثير الاستثناءات).

يمكنك استخدام جافا API التفكير إلى البحث عن مجال حيوي ، كما في هذا المثال.علما أنه سيكون هناك أداء تصل إلى هذا الأسلوب.

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