Rumah > Java > javaTutorial > Mengapa Kelas Java Tidak Mewarisi Anotasi daripada Antara Muka yang Dilaksanakan?

Mengapa Kelas Java Tidak Mewarisi Anotasi daripada Antara Muka yang Dilaksanakan?

Linda Hamilton
Lepaskan: 2024-11-04 18:18:02
asal
615 orang telah melayarinya

Why Don't Java Classes Inherit Annotations from Implemented Interfaces?

Warisan Anotasi dalam Antara Muka Java

Mengapakah kelas Java tidak mewarisi anotasi daripada antara muka yang dilaksanakan? Tingkah laku ini digariskan secara khusus dalam dokumentasi untuk anotasi @Inherited:

Note also that this meta-annotation only causes annotations to be inherited from superclasses; annotations on implemented interfaces have no effect.
Salin selepas log masuk

Pilihan ini disengajakan, kerana ia menghalang jenis konflik berbilang warisan yang halus. Pertimbangkan contoh berikut:

<code class="java">@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface Baz {
    String value();
}

public interface Foo {
    @Baz("baz")
    void doStuff();
}

public interface Bar {
    @Baz("phleem")
    void doStuff();
}

public class Flipp {
    @Baz("flopp")
    public void doStuff() {}
}

public class MyClass extends Flipp implements Foo, Bar {}</code>
Salin selepas log masuk

Jika anotasi daripada antara muka telah diwarisi, menggunakan MyClass.class.getMethod("doStuff").getAnnotation(Baz.class).value() akan mengakibatkan kesamaran:

  • Adakah anotasi @Baz daripada Foo patut diwarisi?
  • Atau adakah anotasi @Baz daripada Bar patut diwarisi?
  • Atau patutkah anotasi @Baz daripada Flipp superclass diwarisi?

Untuk mengelakkan konflik ini, Java secara eksplisit tidak mewarisi anotasi daripada antara muka. Ini memastikan hierarki warisan untuk anotasi adalah jelas dan konsisten.

Dalam kes di mana anotasi antara muka diingini, adalah disyorkan untuk menganotasi kaedah kelas pelaksana secara eksplisit. Ini memberikan fleksibiliti untuk mengawal anotasi khusus yang digunakan pada setiap kaedah.

Atas ialah kandungan terperinci Mengapa Kelas Java Tidak Mewarisi Anotasi daripada Antara Muka yang Dilaksanakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan