当前位置:编程学习 > JAVA >>

泛型和反射问题

package com.ly.generic;

import java.lang.reflect.Method;
import java.util.Date;
class Pair <T>{
private T first;
private T second;
public Pair(){};
public Pair(T first,T second){
this.first = first;
this.second =second;
}
public T getFirst() {
return first;
}
public void setFirst(T first) {
this.first = first;
}
public T getSecond() {
return second;
}
public void setSecond(T second) {
this.second = second;
}
}
public class DateInterval extends Pair<Date>{
public void setSecond(Date second){
if(second.compareTo(getFirst())>0){
super.setSecond(second);
}
}
public static void main(String[] args) {
DateInterval date = new DateInterval();
printClassMethod(date.getClass());
}
public static void printClassMethod(Class<?> date){
Method[] methods = date.getMethods();
for(Method m:methods){
String name = m.getName();
Class<?>[] cs = m.getParameterTypes();
String parameter ="";
for(Class<?> c:cs){
parameter = parameter+c.getName()+",";
}
System.out.println(name+"("+parameter+")");
}
}
}

为什么打印出来是setSecond(java.util.Date,)和setSecond(java.lang.Object,),应该没有setSecond(java.lang.Object,)这个方法啊,Pari这个类的泛型又没有被我擦除,不会产生原始类型啊 --------------------编程问答-------------------- JAVA的泛型检查是在编译时发生的,编译后的class文件时不带泛型类型的,会被自动擦除 --------------------编程问答-------------------- JAVA的泛型的自动擦除功能 --------------------编程问答-------------------- +1 --------------------编程问答-------------------- +1学习。。。。。。
--------------------编程问答-------------------- 貌似虚拟机自动加了桥方法,http://hi.baidu.com/darrenhuang323/item/1125d09f54383dbecc80e5e1
请看这篇文章。。。。


LZ在看Java核心技术第一卷第12章吧。。。今天我也看到这里,呵呵,看的原版。。。感觉这个有些复杂,用的也不多,就快读了。。。。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,