سؤال

أعتقد أنني قرأت في مكان ما الأشخاص الذين يولدون أساليب متساوية / hashcode / tostring أثناء وقت الترجمة (باستخدام APT) عن طريق تحديد الحقول التي يجب أن تكون جزءًا من اختبار التجزئة / المساواة. لم أتمكن من العثور على أي شيء من هذا القبيل على الويب (ربما كنت أحلم به؟) ...

يمكن القيام بذلك على هذا النحو:

public class Person {
  @Id @GeneratedValue private Integer id;

  @Identity private String firstName, lastName;
  @Identity private Date dateOfBirth;

  //...
}

بالنسبة لكيان (لذلك نريد أن نتفوق على بعض الحقول ، مثل المعرف).

أو مثل فئة حالة Scala أي كائن قيمة:

@ValueObject
public class Color {
  private int red, green, blue;
}

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

سمعت أن apt ليس مدعومًا جيدًا في IDE لكنني لن أرى ذلك كمسألة رئيسية. بعد كل شيء ، يتم تشغيل الاختبارات بشكل أساسي بواسطة خوادم التكامل المستمر.

أي فكرة عما إذا كان قد تم ذلك بالفعل وإذا لم يكن السبب؟ شكرًا

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

المحلول

أنا استخدم مشروع لومبوك لهذا.

نصائح أخرى

في حين pojomatic لا يفعل معالجة BYTECODE وقت الترجمة ، فإنه يدعم سهولة إنشاء أساليب متساوية ، و HASHCODE و TOSTRING ، وذلك باستخدام التعليقات التوضيحية لتخصيص سلوكهم.

حل Google في Actovalue المكتبة: https://github.com/google/auto/tree/master/value يستخدم Autovalue التعليق التوضيحي + توليد المصادر قبل التجميع.

وتناقش العديد من الحلول المتنافسة في العرض التالي: https://docs.google.com/presentation/d/14u_h-lmn7f1rxe1ndilx0azs3ikgjgl5uxp5jgj7re/edit

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