27 Ağustos 2020 Perşembe

@FunctionalInterface Anotasyonu

Giriş
Bir arayüzün Object sınıfından override etmediği, static ve default metodlar hariç tek bir metod tanımlamasını sağlar. Arayüz generic parametreler alabilir veya almayabilir. Açıklaması şöyle
A functional interface is an interface that has just one abstract method (aside from the methods of Object), and thus represents a single function contract. This "single" method may take the form of multiple abstract methods with override-equivalent signatures inherited from superinterfaces; in this case, the inherited methods logically represent a single method.
Bir sınıfın static metodu, FunctionalInterface'e cast edilebilir.

Örnek
Şöyle yaparız. Burada Object'ten gelen equals override edilse bile @FunctionalInterface tanımını bozmaz.
@FunctionalInterface
public interface Comparator<T> {

  // abstract method
  int compare(T o1, T o2);

  //overriding public methods of `java.lang.Object`, so it does not count
  boolean equals(Object obj);

}
Örnek
Aşağıdaki kod iki metod tanımlandığı için hata verir.
@FunctionalInterface
public interface Foo{
  public void doSomething();
  public void doSomethingElse();
}
Çıktı olarak şunu alırız.
Invalid '@FunctionalInterface' annotation; Foo is not a functional interface
Örnek
Şöyle yaparız.
@FunctionalInterface 
interface Rideable {
  Car getCar (String name);
}
Örnek - Tek Generic Parametre
Şöyle yaparız.
@FunctionalInterface
private interface Myonsumer<A> {
    void accept(A a);
}
Örnek - 3 Generic Parametre
3 parametre alıp Foo dönen arayüz için şöyle yaparız.
@FunctionalInterface
interface Function<LeadMaster,JSONObject,String,Foo>
{
    public Foo apply(LeadMaster lead,JSONObject jsonObject,String str);
}
Örnek
Exception atan metod tanımlamak için şöyle yaparız.
@FunctionalInterface
public interface Factory<R, T, X extends Throwable> {
    public R newInstanceFor(T t) throws X;
}

Hiç yorum yok:

Yorum Gönder