instanceof Class<T>

Luk10

Top Contributor
Grüße,

Ich brauche eine Methode die mir alle Objekte (in einer Liste) einer spezifischen Klasse (extends Unspecific) gecastet zu specific in einer neuen Liste zurückgibt.

Vererbungshirachie in etwa:

> Interface Unspecific

>> specific1 implements Unspecific
>> specific2 implements Unspecific
>> specific3 implements Unspecific

>>> specific11 extends specific1
>>> ...

Java:
public <T extends Unspecific> List<T> getSpecificFromUnspecific(Class<T> specificX) {
	List<T> result = new ArrayList<T>();
	for(Unspecific u : unspecifics) {
		if(u instanceof specificX) result.add((T) u);
	}
	return result;
}

Leider kenne ich mich mit generics wenig aus und weiß deshalb nicht, wie ich die instanceof-Prüfung umzuformulieren, sodass der compiler nicht meckert und es funktioneren kann.

Danke!
 
Zuletzt bearbeitet:

Mujahiddin

Top Contributor
Du musst dich ein wenig klarer ausdrücken.

Welche Objekte? Du übergibst nirgendswo eine Liste.

Wenn du eine List von Superclass/Interface auf eine List von Subclass/Impl-Class casten willst, kannst du folgendes machen:

Java:
public static final <E, T extends E> List<T> castList(List<E> list, Class<T> clazz) {
	List<T> ret = new ArrayList<>();
	for( E e : list )
		ret.add( cast( e, clazz ) );
	return ret;
}

@SuppressWarnings("unchecked")
public static final <E, T extends E> T cast(E o, Class<T> clazz) {
	return (T) o;
}

Das würdest du in etwa so aufrufen:

Java:
public static void main(String... args) {
	Object o = new String();
	String str = cast( o, String.class );
}
 
Zuletzt bearbeitet:

Luk10

Top Contributor
Die Liste ist eine Member-Variable in der Klasse mit der Methode.
Der Vorschlag von Beni hat schon geholfen. Danke!

Mujahiddin ich kann deinem Beispiel nicht ganz folgen. Es soll eine Klasse übergeben werden und eine Teilliste mit ausschließlich diesen Objekten zurückgegeben werden. Danke trotzdem für deine Antwort.
 

Mujahiddin

Top Contributor
Achso!
Dann müsstest du folgendes verwenden:
Java:
public static final <E, T extends E> List<T> filterList(List<E> list, Class<T> clazz) {
    List<T> ret = new ArrayList<>();
    for( E e : list )
        if( clazz.isInstance( e ) )
            ret.add( cast( e, clazz ) );
    return ret;
}
 
@SuppressWarnings("unchecked")
public static final <E, T extends E> T cast(E o, Class<T> clazz) {
    return (T) o;
}

Das macht, was du willst, auf generische Art:
Eine Liste von "Unspecific" auf "SpecificX" filtern und eine Liste mit allen SpecificX aus Unspecific zurückgeben.

Beispiel:

Java:
public static void main(String... args) throws Exception {
	List<Object> list = new ArrayList<>();
	list.add( "Hallo" );
	list.add( "Welt" );
	list.add( new Object() );
	list.add( new Object() );
	list.add( new Object() );
	list.add( "Hi" );
	list.add( "Wo" );
	List<String> filter = filterList( list, String.class );
	System.out.println( filter.size() ); // 4
}

String ist in diesem Fall "SpecificX" und Object "Unspecific".

Du müsstest es also irgendwie so verwenden:
Java:
List<SpecificX> alleSpecificElemente = filterList( alleUnspecificElemente, SpecificX.class );
 

Mujahiddin

Top Contributor
Stimmt...
Dann eben
Java:
ret.add( clazz.cast( e ) );
statt
Java:
ret.add( cast( e, clazz ) );
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
S Gibt es eine Funktion, die gewissermaßen eine Reihe von instanceOf() vereinheitlicht? Java Basics - Anfänger-Themen 19
J instanceof Operator Java Basics - Anfänger-Themen 3
G instanceof in Generic Java Basics - Anfänger-Themen 7
A instanceof-if-else-Anweisungen eleganter lösen Java Basics - Anfänger-Themen 5
B instanceof Java Basics - Anfänger-Themen 9
L Best Practise - 'instanceof' oder nicht. Java Basics - Anfänger-Themen 7
I if (listenObjekt instanceof meinObjekt.class) Java Basics - Anfänger-Themen 5
A ArrayList-iteration mit Prüfung auf instanceof durch switch case? Java Basics - Anfänger-Themen 13
K Polymorphie und instanceOf Operator Java Basics - Anfänger-Themen 6
M Compiler-Fehler instanceof compiler-error Java Basics - Anfänger-Themen 2
A Alternative instanceof Java Basics - Anfänger-Themen 3
0 Vererbung - instanceof Java Basics - Anfänger-Themen 20
J this instanceof Class<Object> Java Basics - Anfänger-Themen 1
D HasMap mit JComponents mit instanceof Java Basics - Anfänger-Themen 3
K Equals,Instanceof und "==" Java Basics - Anfänger-Themen 7
A Datentypen instanceof VS Class - Vergleich Java Basics - Anfänger-Themen 4
S Bessere Lösung zu häufigem instanceof Java Basics - Anfänger-Themen 25
A Besser als instanceof Java Basics - Anfänger-Themen 6
E instanceof vs class==class Java Basics - Anfänger-Themen 5
B instanceof Prüfung für generische Typen Java Basics - Anfänger-Themen 5
S instanceof Comparable...geht nicht? Java Basics - Anfänger-Themen 20
K instanceof Java Basics - Anfänger-Themen 22
A Vereinfachung instanceof Java Basics - Anfänger-Themen 12
G Mit "instanceof" sich selbst Fragen? Java Basics - Anfänger-Themen 4
S Instanceof umkehren Java Basics - Anfänger-Themen 2
E Negative Abfrage auf instanceof Java Basics - Anfänger-Themen 3
D if (event.target instanceof TextField) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben