سؤال

لدي طريقة لنقول:

private static String drawCellValue(
    int maxCellLength, String cellValue, String align) { }

وكما ترون، لدي معلمة تسمى محاذاة.داخل هذه الطريقة، سأحصل على بعض الشروط حول ما إذا كانت القيمة "يسار" أو "يمين".تعيين المعلمة كسلسلة، من الواضح أنني أستطيع تمرير أي قيمة سلسلة ..أود أن أعرف ما إذا كان من الممكن الحصول على قيمة التعداد كمعلمة أسلوب، وإذا كان الأمر كذلك، كيف؟

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

أيه أفكار؟

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

المحلول

هذا يجب أن يفعل ذلك:

private enum Alignment { LEFT, RIGHT };    
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
  if (align == Alignment.LEFT)
  {
    //Process it...
  }
}

نصائح أخرى

حتى أكثر برودة مع التعدادات يمكنك استخدام التبديل:

switch (align) {
   case LEFT: { 
      // do stuff
      break;
   }
   case RIGHT: {
      // do stuff
      break;
   }
   default: { //added TOP_RIGHT but forgot about it?
      throw new IllegalArgumentException("Can't yet handle " + align);

   }
}

تعد التعدادات رائعة لأن ناتج الاستثناء سيكون اسم قيمة التعداد، وليس قيمة int عشوائية.

أنا أحب هذا أفضل بكثير.يقلل من حالة/التبديل، فقط افعل.

private enum Alignment { LEFT, RIGHT;

void process() {
//Process it...
} 
};    
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
  align.process();
}

بالطبع ، يمكن أن يكون:

String process(...) {
//Process it...
} 

بالتأكيد، يمكنك استخدام التعداد.هل هناك شيء مثل العمل التالي؟

enum Alignment {
    LEFT,
    RIGHT
}

سلسلة ثابتة خاصة drawCellValue(int maxCellLength, String cellValue, AlignmentAlignment) { }

إذا أردت استخدام قيمة منطقية، فيمكنك إعادة تسمية معلمة المحاذاة إلى شيء مثل alignLeft.أوافق على أن هذا التنفيذ ليس نظيفًا، ولكن إذا كنت لا تتوقع الكثير من التغييرات وهذه ليست واجهة عامة، فقد يكون هذا اختيارًا جيدًا.

يمكنك أيضًا إعادة استخدام SwingConstants.{LEFT,RIGHT}.وهي ليست تعدادات، ولكنها موجودة بالفعل وتستخدم في العديد من الأماكن.

لست متأكدًا تمامًا من أنني سأستخدم التعداد كفئة كاملة - هذه لغة موجهة للكائنات، وأحد المبادئ الأساسية لتوجيه الكائنات هو أن الفصل يجب أن يفعل شيئًا واحدًا ويفعله بشكل جيد.

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

لذلك، على الرغم من أنك قد تكون قادرًا على استخدام enum.process()‎، فهذا لا يعني أنه ينبغي عليك فعل ذلك.

يمكنك استخدام التعداد في المعلمات المذكورة مثل هذا:

public enum Alignment { LEFT, RIGHT }
private static String drawCellValue(
int maxCellLength, String cellValue, Alignment align) {}

ثم يمكنك استخدام إما رمز التبديل أو عبارة if للقيام بشيء ما باستخدام المعلمة المذكورة.

switch(align) {
case LEFT: //something
case RIGHT: //something
default: //something
}

if(align == Alignment.RIGHT) { /*code*/}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top