泛型整理知识
1、泛型就是java中的一种类型
2、java.lang.Type代表java语言中的所有的类型
3、泛型是ParameterizedType
getActualTypeArguments() 得到参数
getRawType():得到类和接口
4、ParameterizedType
Parameterized 参数化
Type一般情况下代表类和接口
5、参数的用法
1、类与类与接口之间的传递
1、 public interface Collection<T>{
//
}
2、可以有两种选择
public abstract class AbstractArrayList<T> implements Collection<T>
public abstract class AbstractArrayList implements Collection<Person> //T代表Person
3、可以有两种选择
如果在第二部选择public abstract class AbstractArrayList<T> implements Collection<T>
1、public ArrayList extends AbstrctArrayList<Person> 直接把实参传递给T
2、public ArrayList<T> extends AbstrctArrayList<T>
4、如果在第三步选择了第二个情况,在创建ArrayList对象的时候传递过去
ArrayList<Person> list = new ArrayList<Person>();
2、方法的传递
public <T> T getInstance(Class<T> classt) throws Exception{
return classt.newInstance();
}
6、T的用法
1、可以用在属性上
2、可以用在方法的返回值
3、可以用在方法的参数
7、难点:
T-->Class 该转化过程写到哪最好?
出发点:不希望子类在创建对象的时候,显示调用该过程
当子类创建对象的时候,要调用父类的默认的构造函数,所以写在父类的构造函数中是最好的选择方式
public CommonDaoImpl(){
//调出泛型
//this.getClass().getGenericSuperclass();就代表CommonDaoImpl<T>
ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
this.classt = (Class)type.getActualTypeArguments()[0];//T
type.getRawType()//CommonDaoImpl
8、泛型实例化的时候,在有上述代码的情况下,必须加参数
public class CommonDaoImpl<T>
CommonDaoImpl cdi = new CommonDaoImpl();
9、对应CommonDaoImpl的处理
1、不应该把该类写在spring的配置文件中
2、可以写在配置文件中,但是在配置文件中关于该类的配置写abstract="true",不为该类创建对象
浙公网安备 33010602011771号