2016-03-24 4 views
0

ich diese Frage wissen, wurde Milliarde mal gefragt, aber wie ich umsetzen kann folgende:Vererbung statische Methode in Java

Ich habe Klasse:

public class Product { 
    .... 

    public static Product fromCursor(Cursor cursor) { 
     Product product = new Product(); 
     cursor.moveToFirst(); 
     product.setTitle(cursor.getString(cursor.getColumnIndex(DB.Product.TITLE))); 
     ... 
     return product; 
    } 

    public static List<Product> getProducts(Cursor cursor) { 
     List<Product> products = new ArrayList<>(); 
     if (cursor.moveToFirst()) { 
      while (!cursor.isAfterLast()) { 
       Product product = fromCursor(cursor); 
       products.add(product); 
       cursor.moveToNext(); 
      } 
     } 
     return products; 
    } 
} 

ich erstellen möchten, dass andere Objekte mit dieser Methoden, aber ich don‘ t möchte jedes Mal Methode getProducts implementieren, aber ich sollte fromCursor implementieren.
Wie kann ich es verallgemeinern?

+1

haben Du hast abstrakte Klassen betrachtet? –

+0

@DaneBrick, ja, aber ich weiß nicht, wie abstrakte Klassen mir helfen können? Kannst du mir ein Beispiel zeigen? – comalex3

+0

Wird die Methode getProducts innerhalb der Klassen, die sie implementieren, gleich sein, wenn dies der Fall ist, sollten Sie abstrakte Klassen verwenden. Oder benötigen Sie beide Methoden, um sich aufgrund unterschiedlicher Datentypen geringfügig zu ändern, sollten Sie in diesem Fall Generika verwenden. –

Antwort

0

Verwendung Generics

public class UtilProducts { 


    public static <T> List<T> getProducts(Cursor cursor, T dummyProduct) { 
      ... 
      // you call here dummyProduct.fromCursor(cursor) 
     return (List<T>) ...; 
    } 

public class Product{ 
     ... 
     public static Product fromCursor(Cursor cursor) { 
     Product product = new Product(); 
     cursor.moveToFirst(); 
      product.setTitle(cursor.getString(cursor.getColumnIndex(DB.Product.TITLE))); 
     ... 
     return product; 
    } 

} 


public class OtherProduct{ 
     ... 
     public static OtherProduct fromCursor(Cursor cursor) { 
     OtherProduct product = new OtherProduct(); 

     return product; 
    } 

} 

Für die oben Implementierung Sie UtilProducts.getProducts(cursor, new Product()) und UtilProducts.getProducts(cursor, new OtherProduct())

Allerdings verwenden wollen, müssen Sie sicherstellen, dass alle Ihre Produkte Klasse „implementieren“ eine statische Methode fromCursor()

+0

danke für deine antwort, aber ich kann immer noch nicht verstehen, wie ich es verwenden kann, denn in getProducts brauche ich vonCursor-Methode (siehe mein Beispiel) und ich brauche Fähigkeit Überlastung vonCursor-Methode. – comalex3

+0

@ comalex3 Siehe aktualisierte Antwort –

+0

Dies wird nicht funktionieren. Sie können keine generischen und statischen Methoden kombinieren, wie Sie es gerade tun. –