2013-04-12 3 views
1

У меня есть следующий общий класс:Типа специфический конструктор для общего класса

public class DropdownItem<V, D> { 

    private V value; 
    private D display; 

    public DropdownItem(V value, D display) { 
     this.value = value; 
     this.display = display; 
    } 

    public V getValue() { 
     return value; 
    } 

    public void setValue(V value) { 
     this.value = value; 
    } 

    public D getDisplay() { 
     return display; 
    } 

    public void setDisplay(D display) { 
     this.display = display; 
    } 
} 

Как создать конструктор для определенных типов?

Например,

public DropdownItem(CustomClass custom) { 
    this(custom.getFoo(), custom.getBar()); 
} 

или

public DropdownItem(CustomClass custom) { 
    this.value = custom.getFoo(); 
    this.display = custom.getBar(); 
} 

Ни одно из этих решений работы. Это действительно работает, чтобы сделать это при реализации обобщенного класса:

DropdownItem<Integer, String> myItem = new DropdownItem<Integer, String>(custom.getFoo(), custom.getBar()); 

Однако, я хотел бы включить конструктор в обобщенном классе для достижения этой цели. Есть идеи?

+0

в вашем первом конструкторе вы можете использовать 'if (value instanceof CustomClass) {// do stuff}' – jlordo

+0

@SotiriosDelimanolis Извините. Вопрос исправлен. –

ответ

3

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

public static DropdownItem<Integer, String> getCustomClassInstance(CustomClass custom) 
{ 
    return new DropdownItem<Integer, String>(custom.getFoo(), custom.getBar()); 
} 

Это не может быть другой конструктор. Ваш класс является общим, поэтому любой конструктор должен иметь дело с общими типами V и D, чтобы назначить их value и display. он не может быть конкретным типом в конструкторе (-ах) для этого общего класса.

+0

это работало очень хорошо. Я уронил фабричный метод внутри пользовательского класса, который на самом деле просто перечислит. –

Смежные вопросы