黑马程序员技术交流社区

标题: 泛型的一个问题 [打印本页]

作者: 夜写意    时间: 2013-8-13 23:21
标题: 泛型的一个问题
本帖最后由 夜写意 于 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. }
复制代码

作者: 杨增坤    时间: 2013-8-13 23:46
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类,是不是不能区分是那个类。
希望对你有帮助!



作者: 冒烟的芒果    时间: 2013-8-14 00:14
在定义泛型方法的时候,方法前<>中的内容是泛型标记,这个泛型标记可以是任意的
代码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)为什么没有报错也就一目了然了。
需要指出的是,楼主只定义了一个泛型标记,在方法中却没有用到泛型,这样用泛型根本就没有意义。说明楼主还没有弄明白泛型的用途,加油啊!
作者: 夜写意    时间: 2013-8-14 02:37
冒烟的芒果 发表于 2013-8-14 00:14
在定义泛型方法的时候,方法前中的内容是泛型标记,这个泛型标记可以是任意的
代码4中 Me(String name)这样 ...

是的哦...再回头好好琢磨琢磨...!Thanks




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