Ich versuche, einen generischen Container zu erstellen, an den ich alle Daten übergeben und später extrahieren kann, wobei der Compiler die Klassen verfolgt.

Beispiel:

Container a = new Container(0.3);
a.getValue();// returns 0.3 of type double
Container b = new Container("OMG");
b.getValue();// returns "OMG" of type String

Ich habe keine Einschränkungen, wie es geht. Ich dachte an so etwas.

public class GameSetting {
    Object value;
    Class valueClass;

    public GameSetting(Object value, Class valueClass) {
        this.value = value;
        this.valueClass = valueClass;
    }

    public Class<?> getValue() {
        return (valueClass)value;
    }
    public Class getClass(){return this.valueClass;}
}

Ich erhalte jedoch den Fehler unbekannte Klasse: 'valueClass' .

Bitte helfen Sie

Vielen Dank

2
mp3por 27 Dez. 2015 im 16:06

2 Antworten

Beste Antwort

Sie müssen sich Java Generics ansehen. Ihre grundlegende Containerklasse sieht ungefähr so aus ...

public class Container<T> {
    private final T value;

    public Container(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

Sie verwenden es dann so ...

Container<Double> a = new Container<>(0.3);
a.getValue();// returns 0.3 of type double
Container<String> b = new Container<>("OMG");
b.getValue();

Bei Generika ist zu beachten, dass sie nicht direkt mit primitiven Java-Typen funktionieren. Wenn Sie sie also mit int und double verwenden möchten, müssen Sie Javas Autoboxing -Funktion.

3
sisyphus 27 Dez. 2015 im 13:21
public Class<?> getValue() {
        return (Class) (value);
    }

Sie versuchen, cast mit den Referenzen anstelle von Class einzugeben. Außerdem sollten Sie die endgültige Methode getClass () nicht überschreiben.

0
Shriram 27 Dez. 2015 im 13:19