泛型和反射问题
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