Java-pass-Methode Referenz als parameter an eine andere Methode

Ich versuche mich zu übergeben, einem "get"-Methode von Klasse A eine Methode in der Klasse B. ich habe ausgecheckt Java-Pass-Methode als Parameter, aber ich war nicht in der Lage zu verabschieden, die den interface-Ansatz zu meinem problem in einer angemessenen Art und Weise. Ich würde lieber nicht Verwendung von java 8 (lambdas) und, wenn möglich, vermeiden Sie die Reflexion. Mein Gefühl ist, bin ich auf der Suche auf mein problem der falsche Weg.
Hier ist die spezifische Vereinfachtes Beispiel, was ich versuche zu erreichen:

Ich habe eine Klasse, in der einige Felder und get-Methoden:

public class DataStore {
    private float a;
    private float b;
    private float c;

    public float getA() {
        return a;
    }

    public float getB() {
        return b;
    }

    public float getC() {
        return c;
    }

}

Als Nächstes habe ich meine main-Klasse instanziiert DataStore als Werte einer Karte und dann Zugriff auf bestimmte Felder der DataStore wie:

public class App {

    public static void main(String[] args) {
        //declare TreeMap using DataStore class as value
        Map<Integer, DataStore> dataMap = new TreeMap<Integer, DataStore>();

        //populate Map with example data
        dataMap.put(2,  new DataStore(1f,2f,3f));
        dataMap.put(10, new DataStore(3f,4f,5f));
        dataMap.put(4,  new DataStore(6f,7f,8f));

        //work with specific fields in DataStore, e.g. assign to array
        float[] aArray = getValuesAsArray(dataMap, DataStore.getA());
        float[] bArray = getValuesAsArray(dataMap, DataStore.getB());
        float[] cArray = getValuesAsArray(dataMap, DataStore.getC());
    }

    /**
     * Assign specific field of DataStore from Map to Array
     * @param dataMap
     * @param getVar - reference for specified getter method
     * @return 
     */
    private static float[] getValuesAsArray(Map<Integer, DataStore> dataMap, MethodReference getVar()) {
        int i = 0;
        int nMap = dataMap.size();
        float[] fArray = new float[nMap];
        for (Map.Entry<Integer, DataStore> entry : dataMap.entrySet()) {
            DataStore ds = entry.getValue();
            fArray[i] = ds.getVar();
            i++;
        }
        return fArray;
    }
}

Klar das dies nicht funktionieren, so habe ich, um herauszufinden, wie Euch meine ausgewählten get-Methode in getValuesAsArray().
Irgendwie denke ich, dass mein Ansatz falsch sein kann. Ich bin also offen für Vorschläge.

  • Vielleicht bin ich einfach nur ein noob, aber warum müssen Sie passieren eine Methode hier? Was ist das Programm versucht zu erreichen?
  • Der eigentliche Datenspeicher wird mehr als 3 Felder. Ich bin, sammeln von Daten, die im dataMap in einer zufälligen Weise. Der Schlüssel der treeMap ist eine spärliche Menge der ganzen zahlen verknüpft, um jeden Datensatz. Irgendwann werde ich brauchen, um abzurufen oder Ausgang der einzelnen Feldwerten wie "sortiert" array, wo die Sortierung erfolgt auf der Basis der Schlüssel ganze zahlen sind.
InformationsquelleAutor SwanAH | 2016-08-24
Schreibe einen Kommentar