18 Stimmen

Warum sollte eine Methode in Java flüchtig sein?

Warum sollte eine Methode flüchtig gemacht werden? Wie ändert sich das Verhalten einer Methode, wenn man sie flüchtig macht?

Edita: Ich habe eine toString() auf ein Methodenobjekt, das von einem Klassenobjekt (Java Reflection) zurückgegeben wird. Die Rückgabezeichenkette enthielt den Modifikator "volatile" (flüchtig) im Zusammenhang mit dem Methodennamen, der öffentlichen Sichtbarkeit und dem Rückgabetyp "void". Die Nachforschungen ergaben nur Informationen über volatile für Eigenschaften. Aus diesem Grund habe ich diese Frage gestellt.

Die Methodendeklaration war:

public volatile org.osmdroid.api.IGeoPoint org.osmdroid.views.MapView.getMapCenter()

Code für die Reflexionsmethode:

public static class Test {
    public static void showMethods(Object target) {
        Class<?> clazz = target.getClass();
        for (Method method : clazz.getMethods()) {
            if (method!=null) {
                System.out.println(method.toString());
            }
        }
    }
}

Methodenaufruf:

Test.showMethods(mapView);

2voto

Deepak Bala Punkte 10895

Ich habe einige Nachforschungen angestellt, und meine Schlussfolgerungen decken sich weitgehend mit denen von Cowan. Der folgende Code erzeugt die richtige Ausgabe auf einem Sun JDK 1.6_13

public void go()
{

    try
    {
        Class<?> forName = Class.forName("org.osmdroid.views.MapView");
        Method[] methods = forName.getMethods();
        for(Method m : methods)
        {
            String name = m.getName();
            if(name.equals("getMapCenter"))
            {
                System.out.println(m);
            }
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

Sortie

public org.osmdroid.api.IGeoPoint org.osmdroid.views.MapView.getMapCenter()
public org.osmdroid.util.GeoPoint org.osmdroid.views.MapView.getMapCenter()

Welches JDK verwenden Sie und welche Version ist es? Die Logik, die zum Aufbau der Methode toString() verwendet wird, wäre interessant zu erfahren.

Wer sich für das Android-Jar interessiert, kann es von hier herunterladen

http://code.google.com/p/osmdroid/downloads/list http://www.jarvana.com/jarvana/archive-details/com/google/Android/Android/1.5\_r3/Android-1.5\_r3.jar

0voto

Panayotis Punkte 1698

Es scheint, dass "flüchtige" Methoden vom Java-Compiler unter der Haube erzeugt werden, als "Glue-Methoden" für generische Methoden. Generische Methoden erzeugen unter der Haube Methoden, die nur Object als Parameter akzeptieren und sie in den spezifischen generischen Typ umwandeln, während diese Methoden für den Entwickler unsichtbar sind. Es gibt jedoch einen sichereren Weg, diese Methoden zu bestimmen, indem man die method.isBridge()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X