2012-01-05 4 views
2


Я пытаюсь написать общий метод, который работает для числовых типов и типов строк. Есть ли способ иметь ограниченный тип, подобный этомуопределение ограниченного типа java ограниченного типа для нескольких типов

<T extends Number || String> void print(){...} 

Большое спасибо.

+1

Можете ли вы просто использовать метод полиморфизма? – artbristol

ответ

1

Не совсем. Единственный способ, которым определение типа может быть объявлено для «нескольких типов», заключается в том, что эти типы имеют общий предок в иерархии наследования или реализуют один и тот же интерфейс (ы). Оба Number и String имеют тип Object и реализуют Serializable, но это все, что у них общего.

Кроме того, в вашем примере, что такое универсальный тип? метод не получает никаких параметров и ничего не возвращает. Может быть, вы лучше перегрузить метод print, как это:

void print(String s) {} 
void print(Number n) {} 
+3

Не то, чтобы это помогает здесь, но вы можете фактически объявить столько интерфейсов, сколько хотите в своем параметре типа: 'T extends ClassFoo & InterfaceA & InterfaceB'. В этом случае любой 'T' должен быть подтипом ClassFoo, InterfaceA * и * InterfaceB, и у него будет стирание ClassFoo. – yshavit

2

Лучше решение будет иметь два перегруженных метод:

T void print(<T extends Number> number) {} 

void print(String s) {} 

Надеются, что это помогает.

+0

Спасибо большое! Я подумал об этом, просто не хотел писать тот же метод дважды)) –

+0

@HelenHambaryan, Добро пожаловать! – Egor