Rumah >Java >javaTutorial >Mengapa Antara Muka Java Tidak Mewarisi Anotasi?

Mengapa Antara Muka Java Tidak Mewarisi Anotasi?

Patricia Arquette
Patricia Arquetteasal
2024-11-04 11:47:30988semak imbas

Why Don't Java Interfaces Inherit Annotations?

Warisan Anotasi dalam Antara Muka Java

Warisan anotasi, dilambangkan dengan anotasi @Inherited, membenarkan anotasi disebarkan daripada superclass kepada subkelas. Walau bagaimanapun, pengecualian ketara kepada peraturan ini ialah anotasi pada antara muka yang dilaksanakan tidak diwarisi dengan melaksanakan kelas.

Seperti dokumentasi untuk @Inherited, "meta-anotasi ini hanya menyebabkan anotasi diwarisi daripada superclass; anotasi pada antara muka yang dilaksanakan tidak mempunyai kesan."

Penaakulan Di Sebalik Bukan Warisan

Keputusan reka bentuk ini menghalang konflik warisan dalam senario di mana kelas melaksanakan berbilang antara muka dengan anotasi bercanggah yang sama . 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 MyClass implements Foo, Bar{}</code>

Jika anotasi diwarisi daripada antara muka, nilai @Baz yang manakah akan dikaitkan dengan kaedah MyClass.doStuff()? "baz", "phleem" atau sesuatu yang lain?

Implikasi Praktikal

Warisan anotasi pada antara muka biasanya dianggap tidak biasa dan tidak praktikal kerana potensi konflik dan kesukaran dalam menentukan anotasi yang sah apabila berbilang antara muka menentukan anotasi bercanggah. Adalah dinasihatkan untuk bergantung pada anotasi pada superclass atau menggunakan mekanisme alternatif untuk pemintasan kaedah dalam rangka kerja suntikan pergantungan.

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

Kenyataan:
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