Lombok: Adapter - تعليق توضيحي جديد - اقتراح - لإنشاء تطبيق نمط المحول على ما يبدو لواجهة / فئة مجردة.

تم إنشاؤها على ٨ أكتوبر ٢٠١٧  ·  3تعليقات  ·  مصدر: projectlombok/lombok

هذا هو تنفيذ مباشر (افتراضي) لنمط المحول .

=> تستخدم بشكل متكرر!
=> يجب أن يكون من السهل جدًا إضافته ...
=> التأثير المتوقع ضخم.

عرض:

@Adapter

_إنشاء فئة داخلية للواجهة / الفئة المشروحة ، والتي تحتوي على جميع عمليات تنفيذ الطرق المجردة ، بحيث تقوم كل طريقة بإرجاع قيمة افتراضية لنوع الإرجاع المعلن ._

ضع في اعتبارك الإعداد التالي:

public interface SomeIntegers {
  public int do_int();
  public Integer do_Integer();
}

public interface SomeLongs {
  public long do_long();
  public Long do_Long();
}

public interface SomeFloats {
  public float do_float();
  public Float do_Float();
}

...

...

...

public abstract class SomeNumbers implements SomeIntegers, SomeLongs, SomeFloats, ... {
  public abstract void do_nothing();
}

ثم...

فانيلا جافا:

public abstract class SomeThings extends SomeNumber {

  public abstract String do_String();

  public static abstract class Adapter {

    public abstract int do_int() {
      return 0;
    }

    public abstract Integer do_Integer() {
      return null;
    }

    public abstract long do_long() {
      return 0L;
    }

    public abstract Long do_Long() {
      return null;
    }

    public abstract float do_float() {
      return 0f;
    }

    public abstract Float do_Float() {
      return null;
    }

   ...

   ...

   ...

    public abstract void do_nothing() {
      return;
    }

    public abstract String do_String() {
      return null;
    }
  }
}

مع لومبوك:

<strong i="24">@Adapter</strong>
public abstract class SomeThings extends SomeNumber {
  public abstract String do_String();
}

بعض الاختلافات (للتحكم بسمات التعليق التوضيحي المقترح):

  • إرجاع الافتراضي الأولي بدلاً من null لأنواع الغلاف البدائي ( Integer ، Long ، انظر المثال أعلاه)
    @Adapter(primitiveWrapperReturns=PrimitiveWrapperReturns.NULL) - افتراضي
    @Adapter(primitiveWrapperReturns=PrimitiveWrapperReturns.DEFAULT)
  • قم برمي UnsupportedOperationException بدلاً من إرجاع الافتراضي
    @Adapter(throw=false) - افتراضي
    @Adapter(throw=true)
  • القدرة على وضع تعليقات توضيحية على طرق محددة ، بدلاً من / مع الفصل بأكمله
  • إلخ؟...

التعليق الأكثر فائدة

في المثال الخاص بي ، كنت أحاول توضيح المقدار الضخم من رمز لوحة الغلاية الذي تم توفيره بسبب التعليق التوضيحي المقترح @Adapter . أعتقد أنه مثال جيد ، لأنه ، بشكل أساسي ، يقول: أضف العديد من الواجهات ، والطرق ، ... - مع التعليق التوضيحي @Adapter - لن تضطر إلى إضافة سطر واحد من التعليمات البرمجية.

tomekbielaszewski - أعتقد أن مثالك جيد وبسيط. إنه يوضح نقطة أخرى: إذا اختار مبرمج تنفيذ إحدى طرق الواجهة ، فإنه يتجاوز وظيفة @Adapter المقترحة لهذه الطريقة المعينة. بطريقة أنيقة وبديهية.

ال 3 كومينتر

أفضل أن أراه في شكل أبسط بكثير. ضع في اعتبارك وجود الواجهة التالية:

public interface MyStuff {
  public void doSomething();
  public int calculateSomething();
  public Float calculateSomethingPrecisely();
}

عندما تريد فقط تنفيذ طريقة واحدة doSomething() مع Vanilla Java ، سيكون لديك:

public class MyStuffImpl implements MyStuff {
  public void doSomething() {
    //my code goes here
  }

  public int calculateSomething() {return 0;} //ignored
  public Float calculateSomethingPrecisely() {return 0f;} //ignored
}

ولكن في شكل أبسط مع لومبوك يمكن أن يبدو كما يلي:

<strong i="13">@Adapter</strong>
public class MyStuffImpl implements MyStuff {
  public void doSomething() {
    //my code goes here
  }
}

بالإضافة إلى كل التكوينات الإضافية التي اقترحتها مثل المرتجعات الافتراضية.

في المثال الخاص بي ، كنت أحاول توضيح المقدار الضخم من رمز لوحة الغلاية الذي تم توفيره بسبب التعليق التوضيحي المقترح @Adapter . أعتقد أنه مثال جيد ، لأنه ، بشكل أساسي ، يقول: أضف العديد من الواجهات ، والطرق ، ... - مع التعليق التوضيحي @Adapter - لن تضطر إلى إضافة سطر واحد من التعليمات البرمجية.

tomekbielaszewski - أعتقد أن مثالك جيد وبسيط. إنه يوضح نقطة أخرى: إذا اختار مبرمج تنفيذ إحدى طرق الواجهة ، فإنه يتجاوز وظيفة @Adapter المقترحة لهذه الطريقة المعينة. بطريقة أنيقة وبديهية.

أي تقدم؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات