- 1
public <T extends IOrderSubmitRequest & IApiStoreRef> Order buildOrderFromSubmitRequest(final T request) { ... }
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+123
public <T extends IOrderSubmitRequest & IApiStoreRef> Order buildOrderFromSubmitRequest(final T request) { ... }
Типы-пересечения для бедных. Нужна была функция, работающая с несколькими классами без общего предка, реализующими сразу два интерфейса.
wvxvw 07.08.2014 14:53 # 0
Или, еще может быть, что объекты такого типа нереализуемы (в Яве ж нельзя явно выбрать метод какого интерфейса реализуется, или я не прав?), в принципе, или компилер такое не проверит?
roman-kashitsyn 07.08.2014 14:58 # +2
wvxvw 07.08.2014 15:24 # 0
roman-kashitsyn 07.08.2014 15:43 # 0
Если интерфейсы параметризованы типами, то, поскольку в жабе женерики сделаны через type erasure, компилятор заподозрит конфликт и обругается:
error: name clash: <K>apply(K) in Foo and apply(T#2) in A have the same erasure, yet neither overrides the other
wvxvw 07.08.2014 17:07 # 0
Не то, чтобы это сильно кому-то мешало, но ковырянтность там всякая...
roman-kashitsyn 07.08.2014 17:21 # 0
wvxvw 07.08.2014 15:32 # 0
bormand 07.08.2014 15:36 # 0
Забреет, т.к. в одном классе не могут быть 2 метода с одинаковыми аргументами и разными возвращаемыми типами.
> один интерфейс хочет void foo(T); а второй void foo(K extends T)
Хрен знает, если честно... Я не помню как перегружаются дженерики. Ждем жабистов.
someone 08.08.2014 11:49 # 0
bormand 07.08.2014 15:00 # +1
kegdan 07.08.2014 15:36 # +1
нельзя?
someone 07.08.2014 16:31 # 0
kegdan 07.08.2014 16:43 # 0
TauSigma 07.08.2014 19:39 # 0
А оно тебе надо?
kegdan 07.08.2014 19:52 # 0
TauSigma 07.08.2014 21:06 # 0
Всё-же - не явные преобразования и явные реализации методов интерфейса - достаточно опасная вещь.
И надо 10 раз подумать, а действительно-ли оно надо...
kegdan 07.08.2014 21:11 # 0
someone 08.08.2014 11:56 # 0
Единственное решение в Жабе, где нет нормальных типов-пересечений, приведено в оригинальном посте. В каком-нибудь Ceylon это писалось бы красивее:
roman-kashitsyn 08.08.2014 12:56 # +3
Да, вот теперь НАМНОГО красивее.
kegdan 07.08.2014 15:48 # 0
roman-kashitsyn 07.08.2014 14:59 # +1
Lure Of Chaos 11.08.2014 20:52 # 0
bormand 11.08.2014 21:37 # 0
kegdan 11.08.2014 22:26 # +2
Lure Of Chaos 12.08.2014 05:55 # 0
bormand 12.08.2014 06:12 # 0
Lure Of Chaos 12.08.2014 08:15 # +2
myBigRedButton.setForegroundColor(Color. GREEN);
return BigRedButtonOnPressResultFactory.createBigRedButtonOnPressResult(myBigRedButton);
}