Generische Methode

Status
Nicht offen für weitere Antworten.

SnooP

Top Contributor
Moin...

folgendes Problem: Ich habe eine Methode, die mir aus einer Menge (Collection) Objekte eines bestimmten Typs anzugeben als xyz.class sammelt und in einer Liste ausgibt:

static List getObjectByType(Collection collection, Class type)

Jetzt ist es ja so, dass ich genau weiß, welche Objekte in meiner Liste drinstehen werden, nämlich die vom Typ type... - ich würde daher der Methode gleichzeitig mitgeben können, welcher Typ in dieser Liste am Ende drinstehen wird, sprich generisch... sowas wie:

static List<T> ...

aber wie macht man das überhaupt? ;) ... meine Versuche haben bislang nicht zu wirklichem Erfolg geführt ;) - wie muss denn die Methodensignatur dafür aussehen?

TIA
 

Leroy42

Top Contributor
Mir ist zwar nicht so ganz klar was du meinst,
aber ich sage jetzt einfach mal "Nein!"

Konstrukte wie
Code:
static List<T> ...
werden bereits zur Compilezeit aufgelöst und können nicht
zur Laufzeit ermittelt werden.

Frage: Wozu brauchst du das überhaupt? ???:L

Generische Typdeklarationen dienen doch nur dazu,
daß der Compiler die Methodenaufrufe, die du bei
derartigen Objekten anwenden willst, prüfen kann.

Aber was für Methodenaufrufe hast du denn,
wenn die der Typ zu Compilezeit nicht bekannt ist? :autsch:
 
B

Beni

Gast
Hm, müsste etwas in die Richtung sein:
Code:
    @SuppressWarnings( "unchecked" )
    public static <T> List<T> getObjectByType( Collection<?> collection, Class<T> type ){
        List<T> result = new LinkedList<T>();
        for( Object x : collection )
            if( type.isInstance( x ))
                result.add( (T)x );
        
        return result;
    }
 

thE_29

Top Contributor
<ot> was isn das für ne perverse IDE die einfach dieses @ vor der Methode zulässt ohne irgendwelche Kommentar zeichen?</ot>
 
B

Beni

Gast
Das ist eine IDE, die Java 1.5 unterstützt... das @xyz nennt sich Annotation und ist Teil von Java :wink:
 

SnooP

Top Contributor
Genau das hab ich gesucht ;) ... - mir war das mit den vielen <T>s nicht klar ;)

brauchen tu ich das halt, weil ich eine beliebige Eingabemenge von diversen Objekten bekommen kann.. - derjenige, der dann mein Framework benutzt, muss dann unter Umständen bestimmte Objekte eines bestimmten Typs dieser Eingabemenge verarbeiten... z.B. gib mir alle Personen. Das nervige an meiner bisherigen Lösung war, dass das zwar ging - ich dann aber umständlich casten musste, weil der Iterator mir doch nur Objects geliefert hat... und nicht diejenigen Objekte, deren Typ ich ja schon angegeben hatte ;)

aber thanks Beni! ;)
 

thE_29

Top Contributor
Was das kann man ab java 1.5 so schreiben?

Ich muss mal testen!

Bin ja noch immer 1.4 Entwickler :D



Ohoo.. na dieses annotation Zeugs ist eindeutig neu für mich ;)

Die Generics kenne ich ja von C++.. (heißen da halt Templates)

Wo gibtsn ein gutes Tutorial oder Erklärung wozu dieses annoations Zeugs da ist?
 

thE_29

Top Contributor
Also wenn ich das richtig verstanden habe, sind das so eine Art javadoc nur kann man die zur Laufzeit auch abrufen?!

Und mann kann sie selber erstellen?


Ist das richtig so? Und wie kann man die zur Laufzeit abrufen?
 

byte

Top Contributor
Du kannst die per Reflection zur Rumtime auslesen, aber auch zur Designtime verarbeiten (apt = annotation processing tool). Eigene kannste Dir natürlich auch definieren, Beispiel:

Code:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {}
 

thE_29

Top Contributor
Jo, habe gerade nachgelesen.. (das target steht für was es ausgelesen werden kann und das retention halt für den Zeitpunkt)

Aber wirklich brauchen tut man das jetzt unbedingt nicht?

Oder besser gesagt, wenn ich sie nicht nutze, geht mein Programm trotzdem :)
 

byte

Top Contributor
Gibt halt wenige Anwendungsfälle, wo man sie wirklich braucht. Aber da ist es dann sehr praktisch. Siehe: EJBs 3.0, JAXB, ...
 

thE_29

Top Contributor
Jo, für so Webdingens leuchtets mir wenigstens ein bisi ein ;)

Naja, jetzt weiß ich das auch :D

Und ich dachte immer das ist ne IDE die so die Kommentare schreibt :)

Naja, noch ein schönes WE!
 

SnooP

Top Contributor
Das wäre ja noch schöner, wenn ne IDE nen eignen Java-Dialekt erzeugen würde... und ich die Javaklassen selbst nicht in einem anderen Kontext verwenden könnte ;)

Ich benutze z.B. eine Annotation für meinen ReflectionCopier, der nen deep-copy Ansatz mit Reflections nutzt... da ich in dem Teil dann nicht transient verwenden kann, um zu verhindern, dass bestimmte Attribute kopiert werden, hab ich ne Annotation DontCopy, die man stattdessen vor die Attribute setzen kann.

Aaaaber wirklich viele Anwendungsfälle gibt es dafür auch wieder nicht ;) - also eigene zumindest kaum...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
D Methode für generische enummap/enum Allgemeine Java-Themen 10
C Generische Methode (Schablone) Allgemeine Java-Themen 8
D Statische, generische Methode will nicht. Allgemeine Java-Themen 2
Zrebna Random Number - Generische Formel zwischen zwei INKLUSIVEN Werten Allgemeine Java-Themen 16
F Verständnisprobleme Aufgabenstellung Aktionsobjekte und generische Listen Allgemeine Java-Themen 1
J Generische Interface - Problem Allgemeine Java-Themen 3
J Generische Interfaces mehrfach einbinden Allgemeine Java-Themen 11
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
T Interface mit generische Typen Allgemeine Java-Themen 5
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
H Interface Generische Schnittstelle (rekusiv) Allgemeine Java-Themen 2
C generische Authentifizierung Allgemeine Java-Themen 7
JCODA Generische Map Frage Allgemeine Java-Themen 10
H Generische Array Allgemeine Java-Themen 11
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
D generische Klasse für alle Maps (nicht Collections :-)) Allgemeine Java-Themen 11
B Generische Datentypen MergeSort Allgemeine Java-Themen 5
M Generische Klassen Allgemeine Java-Themen 3
M generische Listener Allgemeine Java-Themen 2
S Generische Typen: Frage dazu Allgemeine Java-Themen 11
H generische Klasse Realtion Allgemeine Java-Themen 2
T Ideenfindung: Generische Transportklasse? Allgemeine Java-Themen 3
G generische Klasse als Parameter einer generischen Klasse Allgemeine Java-Themen 5
leifg Rechenoperationen auf generische Datentypen Allgemeine Java-Themen 10
B Generische Typen instanzieren Allgemeine Java-Themen 11
R Generische Listener und Sender Allgemeine Java-Themen 12
M Generische Datentypen Allgemeine Java-Themen 14
S Generische Liste Allgemeine Java-Themen 30
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
R Frage zu einfügen in generische lineare Liste Allgemeine Java-Themen 7
S Generische Methoden Allgemeine Java-Themen 7
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
T C++ Methode Übersetzung in Java Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Scream_ilias brute force methode verbessern? Allgemeine Java-Themen 6
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
S static methode im Interface Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Sinn einer toString Methode Allgemeine Java-Themen 3
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L ToString-Methode Allgemeine Java-Themen 6
X Datentypen NPE in längerer Methode Allgemeine Java-Themen 12
I Methoden Generics-Methode Allgemeine Java-Themen 3
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
B APi methode kurz anhalten Allgemeine Java-Themen 8
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
R Rekursive Methode Allgemeine Java-Themen 8
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
R rekursive und iterative Methode Allgemeine Java-Themen 3
P Methoden Anwendung der allMatch()-Methode Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72

Ähnliche Java Themen

Neue Themen


Oben