Bunun iyi bir fikir olduğunu% 100 ikna olmuş değilim, ama şu anda olduğu gibi uygulanacağı bugün bazı kod çarptı: MyWidget
sonra mValueMap
kullanmak yöntemler sunarBir arabirimi uygulayan bir enum olmak için genel bir parametrenin nasıl gerekir?
class MyWidget <T extends Enum<T> > {
MyWidget(Map<T, Integer> valueMap) {
mValueMap = valueMap;
}
Map<T, Integer> mValueMap;
}
Enum
geçirildi, dönüştürmek bir Integer
'a.
Ne benim numaralandırma türünü ediyorum ki ben bu refactor çalışıyordu yaptığını düşündüğünü:
interface MyInterface {
public Integer getValue();
}
enum MyEnum implements MyInterface {
foo, bar;
public Integer getValue() {
return ordinal();
}
}
Ve sonra böyle belli belirsiz görünüyordu şey haline MyWidget
yeniden yazmak mümkün etmişti:
public class MyWidget<T extends Enum<T> extends MyInterface> {
...
}
ve MyWidget
içinde T
tipi nesneler üzerinde MyInterface
den getValue()
yöntemi çağırmak mümkün olacaktır. Sorun şu ki, "<T extends Enum<T> extends MyInterface>
" geçerli sözdizimi değil. Bunu çekmenin bir yolu var mı?
Sadece MyWidget<T extends MyInterface>
olmak istemiyorum, çünkü T sayısının bir numaralandırma olması önemlidir.
Şimdiden teşekkürler!
& sözdizimi düzgün, ancak onu kullanarak genellikle bir kod kokusuna dönüştüğünü ve bir şey modelinizle ilgili doğru olmadığını gösteren bir belirtidir. – skaffman
Katılıyorum (Sanırım bunu belki bir veya iki kez kullandım). Ancak, bir arayüz uygulayan envanterlerde, bunun uygun olduğunu düşünüyorum. –
Mükemmel! Tam olarak aradığım şey bu. Çok teşekkürler! – Sbodd