2013-03-12 16 views
5

Pozwól mi powiedzieć, że jest klasą abstrakcyjną, która wyglądarodzajowa fabryka konwencja

abstract class Parent<V> { 

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

ciągu następujące klasy Child

class Child extends Parent<XXX> { 

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

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

Która z nich jest lepsze? newInstance1 lub newInstancw2?

+0

do czego odnosi się E? czy jest to konkretna istniejąca klasa lub zmienna rodzajowa? –

+0

Drogi @ EyalSchneider Zaktualizowałem źródło. Przepraszam. –

Odpowiedz

4

To zależy od scenariusza, w którym używasz newInstance(). W większości przypadków ogólnych:

Od Child wdraża newInstance(), Według mnie

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

byłoby bardziej odpowiednie.

1

Zazwyczaj metoda fabrycznie zdefiniowane wewnątrz niektóre klasy zwraca instancję tej konkretnej klasy, więc powinno być:

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

niezależnie od tego, co klasa rozszerza ta klasa i jakie interfejsy implementuje.