tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
2126
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Methoden überladen / überschreiben auf Basis eines unterschiedlichen Return types.

    Gerade ist mir dieser Artikel untergekommen:
    http://today.java.net/pub/a/today/20...erloading.html
    Hier wird gezeigt wie man (mit ein wenig Aufwand) mehrere Methoden mit den gleichen Parametertypen aber unterschiedlicher Return-Typen angeben kann.

    Unter der Haube macht der Java Compiler einen ahnlichen Trick generische Methoden bei der Implementierung passend zu typen,
    in dem sogenannte Bridge Methods eingefügt werden.
    http://www.tutorials.de/forum/java/2...e-methods.html
    Beispiel:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    /**
     * 
     */
    package de.tutorials;
     
    import java.lang.reflect.Method;
     
    /**
     * @author Tom
     *
     */
    public class BridgeMethodExample {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            for(Method method : Foo.class.getDeclaredMethods()){
                System.out.printf("Method: %s is synthetic: %s / is bridge: %s \n", method.toString(),method.isSynthetic(),method.isBridge());
            }
        }
        
        static interface IFoo<T>{
            T op();
        }
        
        static class Foo implements IFoo<Integer>{
            @Override
            public Integer op() {
                return null;
            }
        }
    }
    Ausgabe:
    Code :
    1
    2
    
    Method: public java.lang.Integer de.tutorials.BridgeMethodExample$Foo.op() is synthetic: false / is bridge: false 
    Method: public java.lang.Object de.tutorials.BridgeMethodExample$Foo.op() is synthetic: true / is bridge: true

    Hier ein Beispiel wie man Methoden mit unterschiedlichen Return Types überschreiben kann:
    (Das geht seit Java 5. Der Return Typ der überschreibenden Methode muss ein zu dem Return Type der
    überschriebenen Methode kompatibel sein)
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    /**
     * 
     */
    package de.tutorials;
     
    /**
     * @author Tom
     *
     */
    public class ReturnTypeCovariance {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            System.out.println(new A().op());
            System.out.println(new B().op());
            System.out.println(new C().op());
            A a = new C();
            System.out.println(a.op());
        }
        
        static class A{
            Number op(){
                return 4711;
            }
        }
        
        static class B extends A{
            @Override
            Long op(){
                return 1234L;
            }
        }
        
        static class C extends A{
            @Override
            Double op(){
                return Math.PI;
            }
        }
    }

    Ausgabe:
    Code :
    1
    2
    3
    4
    
    4711
    1234
    3.141592653589793
    3.141592653589793

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  2. #2
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Jo, das funktioniert, solang die Rückgabetypen der überschreibenden Methoden Subklassen des definierten Rückgabetyps sind. Man spart sich dadurch in vielen Fällen den cast auf einen konkreten Typ, wenn der Supertyp schon eine Methode deklariert hat die einen recht abstrakten Rückgabetyp hat.

    REINHAUN!
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 11.05.10, 15:27
  2. überladen von virtuelle methoden
    Von AlexanderKiebler im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 30.12.08, 15:29
  3. Antworten: 14
    Letzter Beitrag: 20.01.06, 10:51
  4. Überschreiben/Überladen von Methoden
    Von MinaM im Forum Java
    Antworten: 2
    Letzter Beitrag: 26.08.05, 16:38
  5. Axis Problem beim Methoden überladen
    Von cham im Forum Java
    Antworten: 1
    Letzter Beitrag: 25.01.05, 18:13