19 Nisan 2023 Çarşamba

Jakarta EE @Nonnull Anotasyonu

Giriş
Eski kodlarda şu satırı dahil ederiz
import javax.annotation.Nonnull;
Yeni kodlarda şu satırı dahil ederiz. 
import jakarta.annotation.Nonnull;
İmzası şöyle
@Documented
@TypeQualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface Nonnull {
  ...
}
Açıklaması şöyle.
@Nonnull annotation documents the fact that obj must be non-null, while Objects.requireNonNull call ensures that obj is non-null at run-time.
IDE İçinde Uyarıları Gösterme
Bu anotasyon tamamen IDE içinde uyarılar göstermek için. Koşma esnasında exception fırlatmıyor. Açıklaması şöyle
Annotations are just extra information attached to the items they annotate; they don't inherently have built-in logic. If you're using tooling like Lombok or the Kotlin language, the compiler may support automatically adding logic based on the annotations, but otherwise, they don't "do anything" until you actually make an active check (for example, by running your POJO through a validator).
JetBrains Yerine Javax Anotasyonlarını Kullanmak
IntelliJ'in bu anotasyonları tanıması için şöyle yaparız
1. Settings > Inspections > Java > Probable bugs > Nullability problems > @NotNull/@Nullable problems > Configure Annotations
penceresine gidilir

2. Burada Annotation used for code generation olarak javax.annotation.Nullable ve javax.annotation.Nonnull atanır
Koşma Esnasında Exception Fırlatma
IntelliJ kullanıyorsak koşma esnasında exception fırlatması sağlanabilir
1. Settings > Build, Execution, Deployment > Compiler penceresine gidilir
2. Add runtime assertions for notnull-annotated methods and parameters seçilir. 
3. Configure annotations düğmesine tıklanır ve yukarıda tanımladığımız anotasyonların aynısı seçilir. Yani javax.annotation.Nullable ve javax.annotation.Nonnull atanır

Maven
Şu satırı dahil ederiz
<dependency>
  <groupId>com.google.code.findbugs</groupId>
  <artifactId>jsr305</artifactId>
  <version>3.0.2</version>
</dependency>
Örnek
Şöyle yaparız
@Nonnull
public Foo fromString(@Nullable String str) {
  ...
}
Örnek
Şöyle yaparız. Burada halen Objects.requireNonNull() kullanılıyor
public Integer getId(@Nonnull SomeObject obj){   
  Objects.requireNonNull(SomeObject, "SomeObject is null");
  // do some stuff
  return id;
}

Hiç yorum yok:

Yorum Gönder

Bean Validation @GroupSequence Anotasyonu

Örnek Elimizde şöyle bir kod olsun public class SampleRequest {   @NotNull   LocalDate startDate;   @NotNull   LocalDate endDate;   @AssertT...