2016-07-24 9 views
0

Gibt es eine Möglichkeit, einen Typ anzugeben, der mehr als eine Schnittstelle umfasst, und die Typüberprüfung zum Zeitpunkt der Kompilierung durchführen zu lassen?Deklarieren einer Variablen als mehr als eine Schnittstelle

Beispiel: Nehmen wir an, ich eine Methode, wie

void method (Object o) { ... } 

haben Aber ich will o bei der Kompilierung, um etwas zu beschränken, die sowohl java.lang.reflect.Memberundjava.lang.reflect.AnnotatedElement (zB Class, Field, Method, etc.) implementiert und greifen Sie idealerweise auf die Methoden beider Schnittstellen zu, ohne o zu werfen.

Es gibt viele Möglichkeiten, dies zur Laufzeit zu tun, bin ich gerade neugierig auf eine Kompilierzeitprüfung.

+0

@mszymborski Sicher aber ich kann vorhandene Klassen (wie 'java.lang.reflect.Field') nicht ändern, um es zu implementieren. –

+4

Meinst du ' void-Methode (T o)'? –

+1

@SotiriosDelimanolis Whoa. Ich hatte keine Ahnung, dass du das kannst. Das ist genau die Antwort, du solltest es posten. Vielen Dank! (Sorry, resueman hat dich dazu geschlagen!) –

Antwort

3

Ja, das können Sie mit Generika machen. Definieren Sie Ihre Methode so:

<T extends Member & AnnotatedElement> void method (T o){ /* ... */ } 
+0

[Whoa, cool.] (Http://www.reactiongifs.com/r/2013/10/tim-and-eric-mind-blown.gif) Danke! –