黑马程序员技术交流社区

标题: 泛型问题。已解决。3ke your [打印本页]

作者: masai158    时间: 2014-7-29 09:54
标题: 泛型问题。已解决。3ke your
本帖最后由 masai158 于 2014-7-29 11:29 编辑

class MaxArr
{
        public static <T>  maxArr(<T>[] arr)  //为什么这里会编译失败
        {
                Arrays.sort(arr);
                System.out.println(Arrays.toString(arr));
                return arr[arr.length-1];
        }
}
作者: 陈云阳    时间: 2014-7-29 10:19
你在方法前面定义泛型,就代表接收参数是泛型了,你把参数列表里的泛型可以去掉了
作者: masai158    时间: 2014-7-29 10:19
public class Test5 {

        public static void main(String[] args)
        {
                String[] arr = {"fds08","fas18","zfds18","dss18","kkds18"};
               
                String max = new MaxArr().maxArr(arr);
               
                System.out.println(Arrays.toString(arr) + "中最大元素是" + max);
        }

}

class MaxArr
{
        public <T> T  maxArr(T[] arr)
        {
                Arrays.sort(arr);
                System.out.println(Arrays.toString(arr));
                return arr[arr.length-1];
               
        }
}

作者: masai158    时间: 2014-7-29 10:20
陈云阳 发表于 2014-7-29 10:19
你在方法前面定义泛型,就代表接收参数是泛型了,你把参数列表里的泛型可以去掉了 ...

NO。不是滴哟。
作者: masai158    时间: 2014-7-29 10:30
本帖最后由 masai158 于 2014-8-11 16:19 编辑

{:2_31:}!!!我发现 泛型一定要  用
包装类。。

public class Test5 {

        public static void main(String[] args)
        {
        //        String[] arr = {"fds08","fas18","zfds18","dss18","kkds18"};
               
        //        String max = new MaxArr().maxArr(arr);
               
                Integer[] arr = {15,48,48,315,8,4,61,100};       //必须是引用数据类型,不可是基本数据类型
               
                Integer max = new MaxArr().maxArr(arr);
               
                System.out.println(Arrays.toString(arr) + "中最大元素是" + max);
        }

}

class MaxArr
{
        public <T> T  maxArr(T[] arr)
        {
                Arrays.sort(arr);
                System.out.println(Arrays.toString(arr));
                return arr[arr.length-1];
               
        }
}

作者: masai158    时间: 2014-7-29 10:31
陈云阳 发表于 2014-7-29 10:19
你在方法前面定义泛型,就代表接收参数是泛型了,你把参数列表里的泛型可以去掉了 ...

还是谢谢你。{:2_42:}{:2_42:}{:2_42:}{:2_42:}{:2_42:}!!
作者: 王景琛    时间: 2014-7-29 11:03
masai158 发表于 2014-7-29 10:30
!!!我发现 泛型一定要  用
包装类。。

是引用数据类型!
作者: masai158    时间: 2014-7-29 11:05
王景琛 发表于 2014-7-29 11:03
是引用数据类型!

{:2_36:}{:2_36:}{:2_36:}{:2_36:}
你把代码复制过去。试一下。看引用行不行
作者: masai158    时间: 2014-7-29 11:07
public class Test6
{
        public static void main(String[] args)
        {
/*                Integer[] numArr = {40,5,8,20,88,50,10,60};
                Integer key = 4;
                Integer index = getIndex(numArr,key);
                System.out.println(Arrays.toString(numArr) + "中" + key + "位置在:" + index );
*/
                String[] strArr = {"拉拉","嘻嘻","么么","嘎嘎","锤锤"};
                String key = "锤锤";
                int index = getIndex(strArr,key);
                System.out.println(Arrays.toString(strArr) + "中" + key + "位置在:" + index );
        }
       
        public static <T> int getIndex(T[] arr, T key)
        {       
                int index = -1;
                for(int i=0; i<arr.length; i++)
                {
                        if(!(arr[i].equals(key)))
                                continue;
                        else
                        {
                                index = i;
                                break;
                        }                               
                }       
                return index;
        }
}

真心觉得泛型很爽啊。。就是第一次定义有点难搞。如果真的搞懂了。真的是一次定义,多处使用。。
作者: tiandzwx    时间: 2014-7-29 11:08
哥们,为啥我这里可以编译过......我的编译环境是jdk1.6
运行结果:
[dss18, fas18, fds08, kkds18, zfds18]
[dss18, fas18, fds08, kkds18, zfds18]中最大元素是zfds18
作者: 王景琛    时间: 2014-7-29 11:10
masai158 发表于 2014-7-29 11:05
你把代码复制过去。试一下。看引用行不行

你代码中还很多细节错误,当然不行,自己好好再看看吧
作者: masai158    时间: 2014-7-29 11:13
本帖最后由 masai158 于 2014-7-29 11:14 编辑
tiandzwx 发表于 2014-7-29 11:08
哥们,为啥我这里可以编译过......我的编译环境是jdk1.6
运行结果:
[dss18, fas18, fds08, kkds18, zfds18 ...

因为是按照 自然顺序排序的。 使用的 Arrays.sort 函数。。。  "fds08","fas18","zfds18","dss18","kkds18"  这是原串
比较第一位  f  f   z  d   k。当然是 zfds18最大。。
如果不按照字符串顺序,你可以自定义比较器。。

作者: masai158    时间: 2014-7-29 11:16
本帖最后由 masai158 于 2014-8-11 16:21 编辑
王景琛 发表于 2014-7-29 11:10
你代码中还很多细节错误,当然不行,自己好好再看看吧

今天看了张老师的数据。确实说了。在泛型中,不能是基本数据类型,必须是引用数据类型。已经多次证明了。答案我今天有改一下了

作者: masai158    时间: 2014-8-11 16:21
今天看了张老师的数据。确实说了。在泛型中,不能是基本数据类型,必须是引用数据类型。
已经多次证明了。答案我今天有改一下了




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