泛型 里面的 T E K V 分别是什么类型?

haojian11 2010-05-14 11:47:11
泛型<T> <E> <K,V> 里面的 T E K V 分别是什么类型? 这样写有什么好处?

目前,我知道 <String> <Student> 等 这样写的好处。
...全文
855 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zfq642773391 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 haojian11 的回复:]
如2楼所说,T E K V 是占位符,有以下测试类。

Java code

public class User<T1,T2,T3>{
private T1 t1;
private T2 t2;
private T3 t3;
public User(){}
public User(T1 t1,T2 t2,T3 t3){
t……
[/Quote]
这是泛型的写法,用泛型更加灵活且用泛型他可以自动检测类型,减少错误,确保安全性
haojian11 2010-05-14
  • 打赏
  • 举报
回复
如2楼所说,T E K V 是占位符,有以下测试类。

public class User<T1,T2,T3>{
private T1 t1;
private T2 t2;
private T3 t3;
public User(){}
public User(T1 t1,T2 t2,T3 t3){
this.t1=t1;
this.t2=t2;
this.t3=t3;
}
public void main(String[] args){
User u1=new User(1,"aa",23);
User u2=new User("aa",new Date(),12);
}
}




为什么不直接写成这样:


class User2{
private Object t1;
private Object t2;
private Object t3;
public User2(){}
public User2(Object t1,Object t2,Object t3){
this.t1=t1;
this.t2=t2;
this.t3=t3;
}
public void main(String[] args){
User u1=new User(1,"aa",23);
User u2=new User("aa",new Date(),12);
}
}




还请各位高手指点。

绿光 2010-05-14
  • 打赏
  • 举报
回复
<T> <E> <K,V>这些字母都只是一个符号,你自己定义泛型类时,随便你自己写什么字母的,在实际使用中用自己的类名代替就可以了
zqfddqr 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 soli11722984 的回复:]
什么类型都可以,那个只是个占位符

List<String> list = ....;
这里String就相当于T或M或A或。。。。。

一般来说你不是自己创建泛型的类,都不需要自己写这些东东
[/Quote]
同意2楼
ml_dark 2010-05-14
  • 打赏
  • 举报
回复
好处就是进行类型检测

如:

public static <E> void debug(E e){
.....
}
//这个e可以是任何的java对象
//在调用的时候,可以不用做什么处理,在观察类方法说明时,它会自动将参数类型转化为你传的参数
//还有?类型,?表示任何类型
List<?> list=...
List<? extends Object>
//还有pk
public class BaseDao<E,PK extends Serializable>{
//这里的pk一般理解为主键,常用在数据库操作上面
public E getById(PK pk){
//.....
}
}
//用的话就这样用
BaseDao<JavaBean,java.lang.Integer> bd = new BaseDao<JavaBean,java.lang.Intger>();
//关于T,我个人直接把它理解为type,类的type
//如
public static <T extends java.util.Date> T s2d(String s,Class<T> type){
}
s2d("20001010",java.sql.Date.class);
SDMRauquin 2010-05-14
  • 打赏
  • 举报
回复
public abstract class BaseHibernateDAO<T, ID extends Serializable> extends HibernateDaoSupport {
SDMRauquin 2010-05-14
  • 打赏
  • 举报
回复
一般T我是个Table,
通过hibernate的orm映射,
所以实际使用的时候,实际是个hbm对应的entity。

比如这样一段BaseHibernateDAO里面的

public ID save(T entity) {
logger.debug("saving Entity instance");
try
{
logger.debug("save successful");
return (ID)getHibernateTemplate().save(entity);
}
catch (RuntimeException re)
{
logger.error("save failed", re);
throw re;
}
}


K V 1楼说了.
实际基类里面看你随便定义了。
不是自己使用的不需要关心,这个是OO。
自己定义的 比如List<User> list = 。。。自然不能缩写
haojian11 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 soli11722984 的回复:]
什么类型都可以,那个只是个占位符

List<String> list = ....;
这里String就相当于T或M或A或。。。。。

一般来说你不是自己创建泛型的类,都不需要自己写这些东东
[/Quote]

别人写的代码,自定义类这样写的
public class DBTransFlow<T> 
{
...
}


T 好像就是个Object ,不知道这样写有什么好处
soli11722984 2010-05-14
  • 打赏
  • 举报
回复
什么类型都可以,那个只是个占位符

List<String> list = ....;
这里String就相当于T或M或A或。。。。。

一般来说你不是自己创建泛型的类,都不需要自己写这些东东
nickycheung_ 2010-05-14
  • 打赏
  • 举报
回复
k:key
v:value
就是所谓键值对
这是由Map的数据结构所决定的

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧