Enterprise متوسط

يعتمد Spring 7 تعليقات JSpecify مما يجعل non-null القيمة الافتراضية ويقلل الضجيج التعليقي.

✕ Spring 5/6
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;

public class UserService {

    @Nullable
    public User findById(@NonNull String id) {
        return repository.findById(id).orElse(null);
    }

    @NonNull
    public List<User> findAll() {
        return repository.findAll();
    }

    @NonNull
    public User save(@NonNull User user) {
        return repository.save(user);
    }
}
✓ Spring 7
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;

@NullMarked
public class UserService {

    public @Nullable User findById(String id) {
        return repository.findById(id).orElse(null);
    }

    public List<User> findAll() {
        return repository.findAll();
    }

    public User save(User user) {
        return repository.save(user);
    }
}
هل ترى مشكلة في هذا الكود؟ أخبرنا.
✂️

non-null بشكل افتراضي

@NullMarked يجعل جميع الأنواع غير المُعلَّقة non-null فلا تحتاج التعليق إلا الاستثناءات الفارغة.

🌐

معيار النظام البيئي

تعليقات JSpecify هي معيار عابر للأطر مُعترَف به من NullAway و Error Prone والـ IDEs.

🔍

أدوات أغنى

المحللات الثابتة الحديثة تفهم نموذج null في JSpecify وتُبلّغ عن الانتهاكات وقت الترجمة.

الأسلوب القديم
Spring @NonNull/@Nullable
الأسلوب الحديث
JSpecify @NullMarked
منذ JDK
17
الصعوبة
متوسط
أمان null في Spring مع JSpecify
متاح

متاح منذ Spring Framework 7.0 (يتطلب Java 17+)

قدّم Spring 5 و6 تعليقات أمان null الخاصة به في حزمة org.springframework.lang. بينما كانت مفيدة كانت خاصة بالإطار وتتطلب تعليق كل عنصر non-null صراحةً. ينتقل Spring 7 إلى JSpecify وهو معيار عابر للنظام البيئي لأمان null. يُصرّح التعليق @NullMarked على مستوى الفئة أو الحزمة بأن جميع الأنواع غير المُعلَّقة non-null بشكل افتراضي. الأنواع الفارغة الفعلية فحسب هي التي تحتاج تعليق @Nullable مما يقلل التعليق بشكل كبير.

مشاركة 𝕏 🦋 in