返回信息流我知道generic type parameters不能用在static方法里,所以
static Link<E> get(E item, Link<E> nextVal)
是不对的,
但是为啥前面加了<E>,变成这样:
static <E> Link<E> get(E item, Link<E> nextVal)
就可以编译通过了呢?
这是一条镜像帖。来源:北邮人论坛 / java / #21271同步于 2012/1/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
一个静态Java方法的签名看不懂,求指点
huahua00
2012/1/18镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
跟静态没有关系,就是泛型方法,本身就是这么定义的
在你的例子中,其实就是想用E表示一个泛型,其实你叫它A/B/C/D/AA/BB/CC/DD/ABCD……都没有问题,不要被别人的例子套死,看到别人用了E就误以为JAVA定死了泛型只能用E表示。
static <A> Link<A> get(A item, Link<A> nextVal)
上面这样把E换成A完全是可以的
但是要怎样让编译器知道E表示是一个泛型而不是一个具体的类(要是个具体的类那么编译器就会要求你导入它了)呢,就用前面你说多加<E>来声明,告诉编译器这个E是一个泛型,不需要导入啦,使用时再具体给类型就行了。
其实就是这么简单!
给你个链接看看吧,以ArrayList容器举例的
http://www.iteye.com/problems/17418
明白了,多谢帮忙啦!
【 在 GacktCamui 的大作中提到: 】
: 跟静态没有关系,就是泛型方法,本身就是这么定义的
: 在你的例子中,其实就是想用E表示一个泛型,其实你叫它A/B/C/D/AA/BB/CC/DD/ABCD……都没有问题,不要被别人的例子套死,看到别人用了E就误以为JAVA定死了泛型只能用E表示。
: static <A> Link<A> get(A item, Link<A> nextVal)
: ...................
【 在 huahua00 的大作中提到: 】
: 我知道generic type parameters不能用在static方法里,所以
: static Link<E> get(E item, Link<E> nextVal)
: 是不对的,
: ...................
泛型method的语法嘛 这是
发现你给的链接语法是错误的,JDK中的用法是
String[] y = x.toArray(new String[0]);
而不是String[] y = x.toArray<String>(new String[0]);
这个我试验过了是有编译错误的,泛型方法的类型参数传入是通过实参类型进行判断的,而不是通过泛型传入
不知道我的理解是不是有误,忘指教...
【 在 GacktCamui 的大作中提到: 】
: 跟静态没有关系,就是泛型方法,本身就是这么定义的
: 在你的例子中,其实就是想用E表示一个泛型,其实你叫它A/B/C/D/AA/BB/CC/DD/ABCD……都没有问题,不要被别人的例子套死,看到别人用了E就误以为JAVA定死了泛型只能用E表示。
: static <A> Link<A> get(A item, Link<A> nextVal)
: ...................
确实那个人的代码举例是错误的,不仅仅是调用时,ArrayList根本没有length()方法只有size()方法
但文字解释是对的
你看得还真细,我是解释完了担心lz没明白我说的什么意思,随手搜了一个,也没认真看
【 在 muyang 的大作中提到: 】
: 发现你给的链接语法是错误的,JDK中的用法是
: String[] y = x.toArray(new String[0]);
: 而不是String[] y = x.toArray<String>(new String[0]);
: ...................