Heim >Java >javaLernprogramm >Wie kann ich programmgesteuert eine vollständige Liste der Schnittstellenimplementierungen in Java erhalten?

Wie kann ich programmgesteuert eine vollständige Liste der Schnittstellenimplementierungen in Java erhalten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-07 07:17:12901Durchsuche

How Can I Programmatically Get a Complete List of Interface Implementations in Java?

Erhalten einer umfassenden Liste von Schnittstellenimplementierungen durch Programmierung in Java

In Java müssen Sie möglicherweise häufig eine Sammlung von Schnittstellenimplementierungen programmgesteuert abrufen Klassen, die eine bestimmte Schnittstelle implementieren. Dies kann durch verschiedene Ansätze erreicht werden, von denen einige den Einsatz von Reflexion oder anderen speziellen Techniken beinhalten.

Verwendung einer Reflexionsbibliothek: Reflexionen

Die Reflexionsbibliothek bietet eine praktische Möglichkeit um Klassenmetadaten und -beziehungen zu untersuchen. Durch die Verwendung der Reflections-Instanz können Sie eine Reihe von Klassen erhalten, die die gewünschte Schnittstelle erweitern, wie im folgenden Beispiel gezeigt:

Reflections reflections = new Reflections("firstdeveloper.examples.reflections");
Set<Class<? extends Pet>> classes = reflections.getSubTypesOf(Pet.class);

Einsatz von ServiceLoader

ServiceLoader bietet einen Mechanismus zum Suchen und Laden von Service-Provider-Implementierungen zur Laufzeit. Um diese Technik zum Abrufen von Schnittstellenimplementierungen zu nutzen, definieren Sie ein ServiceProviderInterface (SPI) und deklarieren dessen Implementierungen. Der folgende Code veranschaulicht den Ansatz:

ServiceLoader<Pet> loader = ServiceLoader.load(Pet.class);
for (Pet implClass : loader) {
    System.out.println(implClass.getClass().getSimpleName()); // prints Dog, Cat
}

Nutzung von Annotationen auf Paketebene

Eine weitere Alternative besteht in der Verwendung einer Annotation auf Paketebene. Bei diesem Ansatz wird eine benutzerdefinierte Annotation erstellt, die die Schnittstellenimplementierungen angibt. Das folgende Codebeispiel zeigt, wie die Annotation definiert wird:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PACKAGE)
public @interface MyPackageAnnotation {
    Class<?>[] implementationsOfPet() default {};
}

Um die Annotation in einem Paket zu deklarieren, erstellen Sie eine Datei mit dem Namen package-info.java und fügen Sie den folgenden Inhalt ein:

@MyPackageAnnotation(implementationsOfPet = {Dog.class, Cat.class})
package examples.reflections;

Dann können Sie die Schnittstellenimplementierungen mit dem folgenden Code abrufen:

Package[] packages = Package.getPackages();
for (Package p : packages) {
    MyPackageAnnotation annotation = p.getAnnotation(MyPackageAnnotation.class);
    if (annotation != null) {
        Class<?>[] implementations = annotation.implementationsOfPet();
        for (Class<?> impl : implementations) {
            System.out.println(impl.getSimpleName());
        }
    }
}

Das obige ist der detaillierte Inhalt vonWie kann ich programmgesteuert eine vollständige Liste der Schnittstellenimplementierungen in Java erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn