黑马程序员技术交流社区

标题: 关于泛型问题 [打印本页]

作者: 黄敏文    时间: 2011-8-20 18:26
标题: 关于泛型问题
是否可以用泛型来代替System.out.println();方法中的部分重载
作者: 匿名    时间: 2011-8-20 20:23
没看懂!这个帖子什么意思
作者: 匿名    时间: 2011-8-20 21:16
标题: 回复 沙发 的帖子
就是源码里面有很多重载的方法,用来打印不同对象,所以就想能不能用泛型代码,这样就不用写那么多的重载方法了
作者: 匿名    时间: 2011-8-20 22:24
。。。不懂你说什么,但你要重载,你得有个父类吧?
很可惜,system这个类是final的,不能生仔,哈哈。而out这个类是system的内部类,似乎也继承不了,out是静态变量,估计是用了单例模式,还是private修饰符的类(要想知道自己查源代码。。)
作者: 匿名    时间: 2011-8-20 22:38
说错了,out不是一个内部类,只是一个引用对象。我看下源代码再看看能不能回答这个问题
作者: 匿名    时间: 2011-8-20 23:01
标题: 回复 板凳 的帖子
为什么重载需要父类? 重载是在一个类2个以上的方法,声明是一样的,只要参数列表跟个数不一样,这样就可以构成重载了啊:) ,源码里面System.out.println()用的都是PrintStream里面的方法,PrintStream里面有很多print(boolean b),print(char c),print(iint i)这些方法,我的想法是只要写一个print(T t)这样的方法就可以了
作者: 梁锡伟    时间: 2011-8-20 23:57
我有点晕了。。。把重载和重写弄混了。。。看源代码发现print(xx) 里面的方法都是write(xx)实现的,只有object是调用它的toString()完成的。那么如果要像你那样使用泛型的话,应该这么用 :
//不记得写在
public (T)void print(T t) {
     write(String.valueOf(t));或者write(t);
}

好像越搞越矛盾了,因为对一个里面有个char[]数组,如果传一个char[]数组进去,源代码是用write(t)方法的,但实际上char[]也可以看做是一个数组对象吧?但就算是调用write(String.valueOf(t))也能得到想要的,只是调用了new String(char[])变成了一个对象,不知道会先调用哪一个方法了,待会儿debug一下。

如果传进来的是一个object对象,那么按理说应该调用 write(String.valueOf(t))才对。那么确定下来了,应该改为public (T)void print(T t) {
     write(String.valueOf(t));
}

不知道上面的有没有哪里说错了,边看代码边写的。。继续下面的分析
当使用String.valueOf(t)时候,发现String的valueOf方法也和out一个重载了很多方法,而且里面的实现有好几种,看到这里我晕了,因为要使用上面的用了泛型的方法,对String的valueOf方法有较大改动,我自己本人是没法改了= =。。
[ 本帖最后由 梁锡伟 于 2011-08-21  00:47 编辑 ]
作者: 匿名    时间: 2011-8-21 00:09
debug后发现,把char[] c = new char[]{.....}数组传进system.out.println(c);里面,调用的是write(char[])方法而不是调用write(String.valueOf(c)) 方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2