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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夜写意 中级黑马   /  2013-8-13 23:21  /  1410 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夜写意 于 2013-8-13 23:31 编辑

代码1没有问题,但是我想让类接收的是int类型的数据,所以用了泛型,但是加了以后就是代码2的样子。这样就会编译失败。该怎么做呢?好吧,我找出来了:用泛型方法。但是我还是不明白为什么会失败。
代码1
  1. class day
  2. {        
  3.         int month;
  4.         int day;
  5.         day(int month,int day)
  6.         {
  7.                 this.month = month;
  8.                 this.day = day;
  9.         }
  10.         String getday()
  11.         {
  12.                 return new Integer(this.month).toString()+"月"+ new Integer(this.day).toString();
  13.         }
  14. }
复制代码
代码2:
  1. class day<Integer>
  2. {        
  3.         int month;
  4.         int day;
  5.         day(int month,int day)
  6.         {
  7.                 this.month = month;
  8.                 this.day = day;
  9.         }
  10.         String getday()
  11.         {
  12.                 return new Integer(this.month).toString()+"月"+ new Integer(this.day).toString();
  13.         }
  14. }
复制代码
问题又来了:为什么代码3可以代码4不可以?代码3
  1. class day
  2. {        
  3.         int month;
  4.         int day;
  5.         <Integer> day(int month,int day)
  6.         {
  7.                 this.month = month;
  8.                 this.day = day;
  9.         }        
  10. }
复制代码
代码4
  1. class Me
  2. {
  3.         String name;
  4.         <String> Me(String name)
  5.         {
  6.                 this.name = name;
  7.         }
  8. }
复制代码

评分

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

查看全部评分

3 个回复

倒序浏览
class Me
{
        String name;
        <String> Me(java.lang.String name)
        {
                this.name =name;
        }
}
这样就正确了,我是在mycelipse中编译的,提示这样就正确了,
提示的错误的类型不匹配:Type mismatch: cannot convert from String to java.lang.String
我感觉是不是类是String,java.lang包中也有String类,是不是不能区分是那个类。
希望对你有帮助!


评分

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

查看全部评分

回复 使用道具 举报
在定义泛型方法的时候,方法前<>中的内容是泛型标记,这个泛型标记可以是任意的
代码4中<String> Me(String name)这样写就是把String作为一个泛型标记,
然后方法里面所有的String只是一个标记,没有实际的类型(这样很容易与java中已经存在的类名混淆,不建议这样使用,一般用字母 T 作为泛型标记)
所以在这个方法里面的 this.name = name;需要将name强转成java.lang.String,或者将方法定义成<String> Me(java.lang.String name)
你在代码3中用<Integer> day(int month,int day)为什么没有报错也就一目了然了。
需要指出的是,楼主只定义了一个泛型标记,在方法中却没有用到泛型,这样用泛型根本就没有意义。说明楼主还没有弄明白泛型的用途,加油啊!

评分

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

查看全部评分

回复 使用道具 举报
冒烟的芒果 发表于 2013-8-14 00:14
在定义泛型方法的时候,方法前中的内容是泛型标记,这个泛型标记可以是任意的
代码4中 Me(String name)这样 ...

是的哦...再回头好好琢磨琢磨...!Thanks
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马