2016-07-22 16 views
-1

Ich versuche, den Typ eines Array-Elemente zu bekommen. Ich habe so etwas wie dies:Wie kann ich ein Element eines HashSet mit Reflektion erhalten?

Set<Foo> mySet = new HashSet<Foo>(); 

ich über Reflexion zu nehmen haben die ‚Foo‘ als String. Ich habe versucht, so etwas wie dieses:

if (className.equals("java.util.HashSet")){ 
     Object arrayElement = Array.get(value, 0); 
     isComplex = isComplex(field, arrayElement); 
} 

Array.get() ist nur für Arraylist und es gibt keine HashSet.iterator() als Util

Dank!

+0

Ignoriere die Zeile 'isComplex = isComplex (field, arrayElement) ' Ist nur ein boolescher Wert. –

+0

Was ist 'Feld'? – EJP

Antwort

0

Verfahren die Foo zu erhalten ist:

ParameterizedType listType = (ParameterizedType) field.getGenericType(); 
Class<?> stringListClass = (Class<?>) listType.getActualTypeArguments()[0]; 

Aber Sie müssen sicher sein, dass field ist ein Array/Sammlung/HashSet, sonst wird eine Ausnahme sein.

1

Ihre Frage ist ziemlich unklar, aber in diesem Code

new HashSet<Foo>(); 

Sie haben keine Chance, den Foo Teil durch Reflexion zu erhalten. Zeitraum. Der relevante Suchbegriff ist "Typ löschen".