A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄敏文 黑马帝   /  2011-8-20 18:26  /  1688 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

是否可以用泛型来代替System.out.println();方法中的部分重载

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

7 个回复

倒序浏览
黑马网友  发表于 2011-8-20 20:23:51
沙发
没看懂!这个帖子什么意思
回复 使用道具 举报
黑马网友  发表于 2011-8-20 21:16:33
藤椅

回复 沙发 的帖子

就是源码里面有很多重载的方法,用来打印不同对象,所以就想能不能用泛型代码,这样就不用写那么多的重载方法了
回复 使用道具 举报
黑马网友  发表于 2011-8-20 22:24:03
板凳
。。。不懂你说什么,但你要重载,你得有个父类吧?
很可惜,system这个类是final的,不能生仔,哈哈。而out这个类是system的内部类,似乎也继承不了,out是静态变量,估计是用了单例模式,还是private修饰符的类(要想知道自己查源代码。。)
回复 使用道具 举报
黑马网友  发表于 2011-8-20 22:38:02
报纸
说错了,out不是一个内部类,只是一个引用对象。我看下源代码再看看能不能回答这个问题
回复 使用道具 举报
黑马网友  发表于 2011-8-20 23:01:46
地板

回复 板凳 的帖子

为什么重载需要父类? 重载是在一个类2个以上的方法,声明是一样的,只要参数列表跟个数不一样,这样就可以构成重载了啊:) ,源码里面System.out.println()用的都是PrintStream里面的方法,PrintStream里面有很多print(boolean b),print(char c),print(iint i)这些方法,我的想法是只要写一个print(T t)这样的方法就可以了
回复 使用道具 举报
我有点晕了。。。把重载和重写弄混了。。。看源代码发现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:45
8#
debug后发现,把char[] c = new char[]{.....}数组传进system.out.println(c);里面,调用的是write(char[])方法而不是调用write(String.valueOf(c)) 方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马