2013-03-12 3 views
5

Позвольте мне сказать, что есть абстрактный класс, который выглядит какродовой завод конвенции

abstract class Parent<V> { 

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

В следующем классе ребенка

class Child extends Parent<XXX> { 

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

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

Какой из них предпочтительнее? newInstance1 или newInstancw2?

+0

Что такое E? это какой-то конкретный существующий класс или общая переменная типа? –

+0

Уважаемый @EyalSchneider, я обновил источник. Прости. –

ответ

4

Это действительно зависит от сценария, в котором вы используете newInstance(). В большинстве общих случаев:

Child С реализует newInstance(), По мне

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

будет более подходящим.

1

Обычно фабричный метод определяется внутри некоторый класс возвращает экземпляр этого конкретного класса, поэтому он должен быть:

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

независимо от того, какого класса расширяет этот класс и какие интерфейсы он реализует.