Enterprise Intermedio

Spring 7 adotta le annotazioni JSpecify, rendendo non-null il default e riducendo il rumore delle annotazioni.

✕ 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);
    }
}
Vedi un problema con questo codice? Faccelo sapere.
✂️

Non-null per default

@NullMarked rende tutti i tipi non annotati non-null, così solo le eccezioni nullable necessitano di annotazione.

🌐

Standard dell'ecosistema

Le annotazioni JSpecify sono uno standard cross-framework riconosciuto da NullAway, Error Prone e IDE.

🔍

Strumenti più ricchi

I moderni analizzatori statici comprendono il modello null di JSpecify e segnalano le violazioni in fase di compilazione.

Approccio Vecchio
Spring @NonNull/@Nullable
Approccio Moderno
JSpecify @NullMarked
Dal JDK
17
Difficoltà
Intermedio
Spring Null Safety con JSpecify
Disponibile

Disponibile da Spring Framework 7.0 (richiede Java 17+)

Spring 5 e 6 hanno introdotto le proprie annotazioni di null safety nel package `org.springframework.lang`. Sebbene utili, erano specifiche del framework e richiedevano l'annotazione esplicita di ogni elemento non-null. Spring 7 migra a JSpecify, uno standard cross-ecosistema per la null safety. L'annotazione `@NullMarked` a livello di classe o package dichiara che tutti i tipi non annotati sono non-null per default. Solo i tipi effettivamente nullable necessitano dell'annotazione `@Nullable`, riducendo drasticamente la verbosità. Le annotazioni JSpecify sono riconosciute dai principali strumenti di analisi statica come NullAway, Error Prone e IntelliJ IDEA.

Condividi 𝕏 🦋 in