Liste von Klassen die ein Interface implementieren speichern

Status
Nicht offen für weitere Antworten.

Progman

Mitglied
Hallo

Ich versuche aus einem Verzeichniss alle Klassen auszulesen die ein bestimmtes Interface implementieren in eine Liste zu speichern. Hierbei geht es um das Interface "MapGenerator". Ich hab dann erstmal eine Liste erstellt bzw. in meinem Fall eine Map.
Code:
Map<String, Class<? extends MapGenerator>> foobar;

Nun durchlaufe ich mein Verzeichnis mit File.listFiles() und so und lasse mir mit ClassLoader.loadFrom(...) die Klasse laden und zurückgeben. Von diesem Objekt ruf ich Class.getInterfaces() auf und gucke ob mein Interface dabei ist. Wenn ja will ich diese Klasse in meine Map speichern. Jedoch klappt das nicht ohne eine Warnung.
Code:
net/sourceforge/structor/MapFactory.java:83: warning: [unchecked] unchecked cast
found   : java.lang.Class
required: java.lang.Class<? extends net.sourceforge.structor.MapGenerator>
                System.out.println((Class<? extends MapGenerator>)tmp);
                                                                  ^
net/sourceforge/structor/MapFactory.java:84: warning: [unchecked] unchecked conversion
found   : java.lang.Class
required: java.lang.Class<? extends net.sourceforge.structor.MapGenerator>
                this.generators.put("foobar", tmp);
Wobei "tmp" das Class-Objekt von ClassLoader.loadFrom(). Je nach dem wie ich es versuche zu casten, entweder direkt oder ich lasse die Map.put() Methode casten, erhalte ich diese Warnung. Wie krieg ich nun sauber die Variable tmp nach Class<? extends MapGenerator> gecastet? Ich bin dabei auf Class.cast() gestoßen, jedoch weiß ich nicht wie ich ein Objekt vom Typ Class<? extends MapGenerator> erstelle. Oder gibt es vielleicht einen eleganteren weg?

Hier mein bisheriger Code
Code:
    public MapFactory() {
        this.generators = new HashMap<String, Class<? extends MapGenerator>>();
        File f = new File("net/sourceforge/structor");
        if (!f.exists() || !f.isDirectory()) {
            throw new RuntimeException("directory net/sourceforge/structor/ doesn't exists.");
        }
        File[] files = f.listFiles();
        for (int i=0; i<files.length; i++) {
            if (!files[i].canRead()) {
                continue;
            }
            if (!files[i].getName().endsWith(".java")) {
                continue;
            }
            String classname = files[i].getName().replaceAll("\\.java$", "");
            Class  tmp = null;
            try {
                // tmp can be every class
                tmp = ClassLoader.getSystemClassLoader().loadClass("net.sourceforge.structor."+classname);
            } catch (ClassNotFoundException e) {
                System.out.println(e);
                System.exit(16);
            }
            Class[] interfaces = tmp.getInterfaces();
            boolean found = false;
            for (int j=0; j<interfaces.length; j++) {
                if (interfaces[j].equals(MapGenerator.class)) {
                    found = true;
                    break;
                }
            }
            if (found) {
                // "tmp" is a valid class of MapGenerator, save it.
                System.out.println("loaded Map Generator "+tmp);
                System.out.println(tmp);
                System.out.println(tmp.getClass());
                System.out.println("-: "+MapGenerator.class);
                //System.out.println((MapGenerator.class).cast(tmp));
                System.out.println((Class<? extends MapGenerator>)tmp);
                this.generators.put("foobar", tmp);
                // this.generators.put(((MapGenerator)tmp.newInstance()).getType(), tmp);
            }
        }
    }
 

Wildcard

Top Contributor
Ignorier die Warnung oder mach @SuppressWarnings("unchecked") über die Methode und fertig.
Du weißt ja das der Typ passt, insofern ist es nicht wirklich "unchecked".
 

Progman

Mitglied
statt @SupressWarnings kann ich auch ohne -Xlint:unchecked kompilieren, aber das will ich ja grad nicht. Ich will sauber casten und dachte da an Class.cast() (was auch eine ClassCastException werfen kann). Jedoch klappen Ausdrucke wie
Code:
Class<? extends MapGenerator>.cast(tmp);
bzw.
Code:
(Class<? extends MapGenerator>).cast(tmp);
nicht (parse error)
 

Ariol

Top Contributor
Code:
try{
  ((Class<? extends MapGenerator>)tmp)
}catch(ClassCastException cce){}
hilft dir das?
 

Progman

Mitglied
Ob ich da ein try-catch Block drum mache oder nicht, es bleibt der selbe cast und ich krieg somit auch die Warnung "net/sourceforge/structor/MapFactory.java:85: warning: [unchecked] unchecked cast"
 

Progman

Mitglied
Es gibt wohl keine Möglichkeit ein Object vom Typ Class nach Class<? extends MapGenerator> zu casten ohne das eine Warnung erzeugt wird. Somit gebe ich auf und benutze @SupressWarning(). :(
 
G

Guest

Gast
Progman hat gesagt.:
Es gibt wohl keine Möglichkeit ein Object vom Typ Class nach Class<? extends MapGenerator> zu casten ohne das eine Warnung erzeugt wird. Somit gebe ich auf und benutze @SupressWarning(). :(
So ist es. Die Warnung ist ja dazu da, auf potentielle Fehlerquellen hinzuweisen.
Wenn man weiss, dass der betreffende Code korrekt ist, kann man die Warnung
unterdrücken.
 

schalentier

Gesperrter Benutzer
Lass doch einfach diesen ganzen Generic-Overhead weg und mach stattdessen:
Code:
  HashMap<String, Class> generators;

Da brauchste auch kein @SuppressWarnings...
 

Progman

Mitglied
wenn ich die Klassen aus der Map auslese und diese "nur" als 'Map<String, Class> generators' speicher dann muss ich später bei newInstance() nach (MapGenerator) casten. Dann hab ich das selbe Problem nur woanders. Die Map soll ja nur spezielle Class-Objekte enthalten, nicht allgemein irgendwelche Class-Objekte (auch wenn ich weiß dass dort nur Class-Objekte reinkommen die MapGenerator implementieren).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
K Liste aller implementierenden Klassen einer Oberklasse anzeigen Allgemeine Java-Themen 4
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
MiMa Filtern von TableView Liste Allgemeine Java-Themen 2
B Liste aller Kombintionen mit Einschränkungen Allgemeine Java-Themen 8
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
M einfach verkettete Liste verstehen Allgemeine Java-Themen 23
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
K verkettete Liste Allgemeine Java-Themen 3
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
T Google Links in einer Liste Allgemeine Java-Themen 4
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
L Liste überschreibt alte Elemte Allgemeine Java-Themen 10
H Länge einer verketteten Liste Allgemeine Java-Themen 4
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
Z In die Liste kann ich nichts adden Allgemeine Java-Themen 16
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
M liste von listen anders ausgeben Allgemeine Java-Themen 1
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
E Liste löscht sich selbstständig Allgemeine Java-Themen 5
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
D Liste anhand Standardnormalverteilung befüllen Allgemeine Java-Themen 1
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
O aus Liste ein beliebiges Element auswählen Allgemeine Java-Themen 7
J Liste aller Com-Ports - zweistellige Ports? Allgemeine Java-Themen 15
O MVC - wo Liste der ComboBox-Items ermitteln Allgemeine Java-Themen 3
MiMa Liste von Pfaden in eine textArea schreiben Allgemeine Java-Themen 7
K kontinuierlich aktuelle Bestellsystem-Liste mit farbigem Status Allgemeine Java-Themen 2
A Auswählbare Liste Allgemeine Java-Themen 2
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
N Liste gesucht Allgemeine Java-Themen 2
Z Sortiertes Einfügen in doppelt verkettete Liste Allgemeine Java-Themen 5
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8
O JSON String bauen aus Liste Allgemeine Java-Themen 2
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
D Zugriff auf Array-Liste Allgemeine Java-Themen 19
S Threads Liste mit Objekten in Teillisten zerlegen und abarbeiten Allgemeine Java-Themen 3
R ThreadPool - vorhandene thread liste überprüfen bzw. aufräumen Allgemeine Java-Themen 3
pg1337 Liste füllen Allgemeine Java-Themen 2
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
B Properties File Liste Allgemeine Java-Themen 3
Gossi Collections Liste zusammenfassen für JSP Allgemeine Java-Themen 4
Gossi Collections (Unbekannte) Liste Sortieren Allgemeine Java-Themen 10
T Collections Liste schnell/nebenläufig durchgehen Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
Q "Doppelte" Einträge einer Liste entfernen Allgemeine Java-Themen 14
C Exponentielle Verteilung in einer Liste Allgemeine Java-Themen 7
Nic.o liste der installierten Zertifikate ?! Allgemeine Java-Themen 3
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
M Verständnisfragen bezüglich Liste Allgemeine Java-Themen 3
S AWT Wie bekomme ich eine Liste aller chars in einem Font? Allgemeine Java-Themen 3
J Zeichenketten-Liste filtern Allgemeine Java-Themen 6
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
M Eintrag verschwindet aus Liste Allgemeine Java-Themen 3
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
reibi Kopie einer Liste Allgemeine Java-Themen 4
N Liste mit Map abgleichen extrem langsam Allgemeine Java-Themen 6
C Darstellung der Liste bei vielen Daten extrem langsam Allgemeine Java-Themen 11
T Liste sortieren Allgemeine Java-Themen 6
L Objekte in Liste packen Allgemeine Java-Themen 2
N Liste aendern waehrend des iterierens ueber selbige Allgemeine Java-Themen 11
B Datenstruktur: Liste Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben