1. 前幾天在水木上看到有人問
class Demo>E<{
public Class getDynamicClass(){
Class clazz=//----------------------如何獲取E的類?
return clazz;
}
}
貌似只能這樣解決
class Demo>E<{
E e;
public void addElement(E e){
this.e = e;
}
public Class getDynamicClass(){
Class clazz = e.getClass();
return clazz;
}
}
一些相關(guān)評(píng)論
Java的范型就是半個(gè)殘廢
nod,Java的范型除了防止類型轉(zhuǎn)換錯(cuò)誤以外我真想不起來有什么實(shí)質(zhì)的用途。
尤其是那個(gè)文檔中說的,編譯的時(shí)候拿掉,運(yùn)行的時(shí)候再檢查...
確實(shí)沒什么用,jg老糊涂了偏要聽信c++那個(gè)bs老頭才有這個(gè)敗筆,我一直這么認(rèn)為
這個(gè)東西歐n年前就沒有搞出來
還是有點(diǎn)用的,在ORM中定義多對(duì)一或者多對(duì)多關(guān)系的時(shí)候,
List>C< numbers;
這時(shí)候偶就知道numbers關(guān)聯(lián)的是C類,不需要在其它地方再配置了,
為啥沒用
否則對(duì)容器的使用還得停留在指針時(shí)代
C#的泛型性能還是很好的,只是Java的實(shí)現(xiàn)機(jī)制那啥了點(diǎn)。。。
最后有人回
很多事情,不要著急下結(jié)論。以下代碼算轉(zhuǎn)載,不算原創(chuàng)。
-------------華麗的分割線---------------------------------
protected Class getDomainClass() {
if (domainClass == null) {
ParameterizedType thisType = (ParameterizedType)
getClass().getGenericSuperclass();
domainClass = (Class)
thisType.getActualTypeArguments()[0];
}
return domainClass;
}
-------------華麗的分割線---------------------------------
還沒試過可不可以
2. 另外一個(gè)類似的帖子的回復(fù)
System.out.println(((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
試驗(yàn)了半天
public class BaseClass>M<{
public void showType(){
ParameterizedType ptype = (ParameterizedType) getClass()
.getGenericSuperclass();
System.out.println(ptype.getActualTypeArguments()[0]);
}
}
public class ExClass>M< extends BaseClass>M<{}
new ExClass>Date<().showType(); //得到 "M" 而不是想要的 "Date" :'(
我以前也想這么搞,可是沒搞成,后來看Java關(guān)于泛型的實(shí)現(xiàn),認(rèn)為沒希望。
前面所說的方式只有在
public class SomeClass extends BaseClass>AnotherClass< {...}
這樣定義的時(shí)候才能取到AnotherClass ...
3. 看到另一個(gè)帖子說運(yùn)行期沒有范型