Generics

Markus XXX

Mitglied
Hallo zusammen.

Ich speichere Werte mittels der Klasse java.util.Properties in eine Txt Datei.
Um das Auslesen etwas zu vereinfachen, habe ich mir eine Generics- Klasse gebaut:

Java:
public class ConfigHandler <K> extends PdmTalkObject
{
    private static Properties properties = new Properties();
    
     /** Ließt ein Propertie aus einer Konfigdatei aus. */
    
    @SuppressWarnings("unchecked")
    public K readConfig (ConfigProperty prop) throws IOException, FileNotFoundException
    {
      
        try (FileInputStream in = new FileInputStream(configFile);)
        {
            properties.load(in);
            String s = properties.getProperty(prop.propertyKey);
            return ((K) s);
        }
        catch (...)
        {
             ....
        }
    } 
}

Das ganze starte ich dann mittels
Java:
            ConfigHandler <Integer> ch = new ConfigHandler<>();
            Integer x = ch.readConfig(ConfigProperty.FORM_SHOW_UE_X);
            Integer y = ch.readConfig(ConfigProperty.FORM_SHOW_UE_Y);

Was mir nicht ganz in den Kopf möchte: Das Auslesen der Variable ist ok, es wird auch ein Wert von der obigen Methode zurückgeliefert, aber er hat den Typ String, obwohl ich ihm doch über die Generics sage, daß es Integer sein soll :shock:
Wenn ich den String dann explizit mittels Integer.valueOf(..) casten möchte, bekomme ich die Meldung, ein String könne nicht nach int gecastet werden, obwohl im String "22" steht ;(
Er kracht also erst beim unteren Quellcodeschnipsel, die obere Methode wird "korrekt" ausgeführt.

Weiß jemand wo mein Denkfehler steckt?
By the way, ich setze Java 7 ein.
 
Zuletzt bearbeitet von einem Moderator:
A

AwsmDude

Gast
Man kann nicht einfach einen String zu X casten. Den String musst du in diesem Fall auf jeden Fall parsen.

Integer.valueOf() castet nicht String zu int sondern int zu Integer.
Du meinst Integer.parseInt().
 

Evil-Devil

Top Contributor
Interessant das es überhaupt kompiliert.
Code:
ConfigHandler <Integer> ch = new ConfigHandler<>();
würde ich zu folgendem ändern:
Code:
ConfigHandler <Integer> ch = new ConfigHandler<Integer>();

Damit wäre der Konstruktor korrigiert.

Dann könnte evtl. sogar dein Cast nach Integer schon funktionieren. Sind die Properties Klassen nicht auch generisch?
 

faetzminator

Gesperrter Benutzer
[c]Properties[/c] kennt nur Strings. Du kannst das Objekt allenfalls serialisieren und beim auslesen wieder deserialisieren. Du kannst aber natürlich auch - wenn du weisst was für Typen du erwartest - "von Hand" parsen. Also für einen Integer wär das dann [c]toString()[/c] und [c]getInteger(String)[/c].

Edit: @Evil-Devil: Das liegt wohl an Java 7, dort ist das erlaubt ;)
 
S

SlaterB

Gast
Integer.valueOf() funktioniert mit "22" wie nicht überraschend folgendes Programm zeigt:
Java:
public class Test {
    public static void main(String[] args) {
        System.out.println(Integer.valueOf("22"));
    }
}
an der Fehlermeldung muss man dann nicht verzweifeln sondern kann logisch überlegen dass der String dann wohl doch nicht "22" war,
vielleicht sind Leerzeichen oder andere komische Zeichen drin, Länge und jedes Zeichen einzeln ausgeben,
ultimativ ist zunächst ein equals-Vergleich mit einem String "22" im Quelltext
 

Landei

Top Contributor
Java:
String s = properties.getProperty(prop.propertyKey);
return ((K) s);

Property-Dateien können nunmal nur Strings speichern und dementsprechend Strings zurückliefern. Einen String in einen Integer casten funktioniert nicht. Du musst also irgendwie für jeden Datentyp K einen Weg haben, ihn aus einem String zu extrahieren. Eine Lösung (ungetestet) wäre:

Java:
public interface Converter<K> {
   public K fromString(s:String);
}

public class IntConverter implements Converter<Integer> {
   public Integer fromString(s:String) { return Integer.parseInt(s); }
}

//gegebenfalls andere Konverter:
public class StringConverter implements Converter<String> { 
  public String fromString(s:String) { return s; }
}

public class ConfigHandler <K> extends PdmTalkObject
{
    private static Properties properties = new Properties();
    private final Converter<K> conv;

    public ConfigHandler(Converter<K> conv) {
        this.conv = conv;
    }
    
     /** Ließt ein Propertie aus einer Konfigdatei aus. */
    
    @SuppressWarnings("unchecked")
    public K readConfig (ConfigProperty prop) throws IOException, FileNotFoundException
    {
      
        try (FileInputStream in = new FileInputStream(configFile);)
        {
            properties.load(in);
            String s = properties.getProperty(prop.propertyKey);
            return conv.fromString(s);
        }
        catch (...)
        {
             ....
        }
    } 
}

ConfigHandler <Integer> ch = new ConfigHandler<>(new IntHandler());
Integer x = ch.readConfig(ConfigProperty.FORM_SHOW_UE_X);
Integer y = ch.readConfig(ConfigProperty.FORM_SHOW_UE_Y);
 

faetzminator

Gesperrter Benutzer
Mich wundert hier auch eher, daß die Methode einen String zurückgibt, obwohl sie ja mittels Generics einen Integer zurückgeben sollte.

Generics gibts zur Laufzeit nicht mehr. Ich hatte gerade diese Woche auch eine ArrayStoreException o.ä., da irgendwo in einer Liste nicht die Typen waren, welche ich erwartete... Ist also durchaus irgendwie bewerkstellbar ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Best Practice Generics mit Enum Allgemeine Java-Themen 3
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
P Generics und Arrays Allgemeine Java-Themen 6
M Generics / Typen Allgemeine Java-Themen 1
Kirby.exe InsertionSort mit Generics Allgemeine Java-Themen 33
Kirby.exe Vererbung bei Generics Allgemeine Java-Themen 7
H Klarnamen etc... (von Wie Generics lernen?) Allgemeine Java-Themen 26
D Wie Generics lernen? Allgemeine Java-Themen 26
L Compiler-Fehler Generics beim Anhängen von Predicates Allgemeine Java-Themen 1
W Vererbung Generics - mal wieder die verhaßte Rückwärtskompatibilität Allgemeine Java-Themen 2
S Verstaendnisfrage Generics Allgemeine Java-Themen 19
W Generics + Vererbung Allgemeine Java-Themen 47
I Methoden Generics-Methode Allgemeine Java-Themen 3
D Mit Generics arbeiten - Übungsaufgabe Allgemeine Java-Themen 3
K Factory Pattern: Mit Generics umgehen Allgemeine Java-Themen 6
G Generics Allgemeine Java-Themen 31
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
Hacer Generics & Collections Allgemeine Java-Themen 8
Neumi5694 Interface Generics für Enum-Filterung verwenden Allgemeine Java-Themen 5
H Collector Generics Problem (incl. Stream & Lambda) Allgemeine Java-Themen 4
C Gemeinsame Oberklasse zweier Generics Allgemeine Java-Themen 10
erdmann Datentypen Methodendeklaration mit Generics Allgemeine Java-Themen 2
Z Datentypen Verschachtelte Generics Allgemeine Java-Themen 1
Neumi5694 Datentypen Generics Allgemeine Java-Themen 5
S Mit Generics Klasse erstellen die selbst T erweitert..? Allgemeine Java-Themen 4
Tarrew Generics - Type erasure Allgemeine Java-Themen 5
N Problem mit Generics und Interface Allgemeine Java-Themen 4
H Generics als Parameter Allgemeine Java-Themen 1
kaoZ Generics und Vererbung Allgemeine Java-Themen 3
A Datentypen Generics: Wie am besten auf Typparameter zugreifen Allgemeine Java-Themen 2
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
vandread Kleine Generics Aufgabe aus einer Prüfung... wie ist das gemeint? Allgemeine Java-Themen 6
G Generics sind zu streng - oder ich zu naiv? Allgemeine Java-Themen 3
G Verschachtelte Generics Allgemeine Java-Themen 2
O Generics Allgemeine Java-Themen 42
M Problem mit Generics Allgemeine Java-Themen 10
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
H Collections Generics und Reflection Allgemeine Java-Themen 6
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
H Problem mit Java Generics Allgemeine Java-Themen 6
J Generics: Typparameter als Klasse zurückliefern Allgemeine Java-Themen 4
H Generics Allgemeine Java-Themen 5
P Probleme mit Generics Allgemeine Java-Themen 5
B Generics und primitve arrays Allgemeine Java-Themen 6
1 Collections Generics, internes Verhalten Allgemeine Java-Themen 16
T Warnungsfreie Verwendung von Generics Allgemeine Java-Themen 11
M Probleme mit Generics Allgemeine Java-Themen 5
D Java Generics Allgemeine Java-Themen 8
2 Generics: bounded wildcards Allgemeine Java-Themen 4
J Generics / vermeiden von downcasts Allgemeine Java-Themen 2
2 Generics oder nicht? Allgemeine Java-Themen 8
E Problem mit Generics und Comparable Allgemeine Java-Themen 16
W Erweitern einer Klasse mit Generics Allgemeine Java-Themen 8
H Generics für Methode Allgemeine Java-Themen 14
N Überladen mit Hilfe von Generics Allgemeine Java-Themen 3
S Generics: Fuer Set<T> ein T-Klassenobjekt erhalten? Allgemeine Java-Themen 3
Q Der innere Typ von Generics? Allgemeine Java-Themen 3
N Generics-NullpointerException Allgemeine Java-Themen 7
2 Generics - Typ Allgemeine Java-Themen 12
P Generics Problem Allgemeine Java-Themen 10
S Type safety Warnings beim casten von Generics Allgemeine Java-Themen 6
N Generics Allgemeine Java-Themen 3
V Frage zu Generics Allgemeine Java-Themen 2
S java generics klassen deklaration Allgemeine Java-Themen 7
B hashtable für unterschiedliche Typen - mit Generics Allgemeine Java-Themen 8
E Generics Allgemeine Java-Themen 3
MQue Generics Allgemeine Java-Themen 4
R Problem mit Reflection und Generics Allgemeine Java-Themen 3
C Klassen, die aufeinander verweisen (mit Generics) Allgemeine Java-Themen 16
G Generics - W.card unter Nutzung von Annotationsklasse? Allgemeine Java-Themen 6
G sortieren von generics Allgemeine Java-Themen 10
G Generics in Map. Type of value abhängig vom key Allgemeine Java-Themen 3
A Generics Verständnisfrage Allgemeine Java-Themen 7
Z Generics funzt nicht? Allgemeine Java-Themen 2
T Generics Allgemeine Java-Themen 18
G ComboBox: Nur eine Art Klasse zulassen (Generics) Allgemeine Java-Themen 3
J Generics Expertenwissen? Allgemeine Java-Themen 5
S Generics-Problem Allgemeine Java-Themen 3
T Generics und Wil-dcards Allgemeine Java-Themen 8
Q Typen von Generics & Casten Allgemeine Java-Themen 3
S Generics Allgemeine Java-Themen 2
R Problem mit Generics Allgemeine Java-Themen 2
G Trotz Generics Cast-Fehler! Allgemeine Java-Themen 5
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
T Generics und instanceof Allgemeine Java-Themen 10
T Generics und Exceptions Allgemeine Java-Themen 6
M Beliebig viele Typen bei Generics Allgemeine Java-Themen 3
G Reflection objekt mit generics erzeugen Allgemeine Java-Themen 5
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
G Generics und Comparable Allgemeine Java-Themen 11
H Generics Problem Allgemeine Java-Themen 3
F Generics: spricht etwas dagegen raw types zu verwenden? Allgemeine Java-Themen 31
M Generics - besser programmieren, Warnung umgehen Allgemeine Java-Themen 4
E Java, UML, Generics Allgemeine Java-Themen 6
P Array von Vectoren + Generics Allgemeine Java-Themen 6
M ArrayList erweitern - generics Allgemeine Java-Themen 4
E Generics -> UML Allgemeine Java-Themen 4
G Generics: Instanzieren einer Klasse in einer Methode. Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben