2013-03-12 12 views
5

Lasciatemi dire v'è una classe astratta che assomigliagenerico factory convenzione

abstract class Parent<V> { 

    protected static <T extends Parent<V>, V> T newInstance(
     final Class<T> type, final V value) { 
     // ... 
    } 
} 

All'interno seguente classe di bambini

class Child extends Parent<XXX> { 

    public static Child newInstance1(final XXX value) { 
     // ... 
    } 

    public static Parent<XXX> newInstance2(final XXX value) { 
     // ... 
    } 
} 

Quale è preferibile? newInstance1 o newInstancw2?

+0

a cosa si riferisce E? è una classe esistente concreta o una variabile di tipo generico? –

+0

Gentile @ EyalSchneider ho aggiornato la fonte. scusa. –

risposta

4

In realtà dipende dallo scenario in cui si sta utilizzando lo newInstance(). Nella maggior parte dei casi generali:

Dal Child sta attuando newInstance(), secondo me

protected static Child newInstance() 
{ 
    // ... 
} 

sarebbe più appropriato.

1

Solitamente, metodo factory definita all'interno di una certa classe restituisce un'istanza di questa classe particolare, quindi dovrebbe essere:

public class Foo ... 
{ 
    public static Foo newInstance() 
    { 
     ... 
    } 
} 

indipendentemente da quale classe questa classe estende e quali interfacce implementa.