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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我看毕老师视频里将的,泛型可以定义在方法上,那么就按传进来的类型来操作这个方法。可是如果不用泛型,用object,不是一样会用传进来的类型操作方法吗?

比如这个代码
public class FanXin {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Demo d = new Demo();
                d.print("abc");
                d.print(123);
                d.show("abc");
                d.show(123);
        }

}

class Demo{
        public<T> void print(T t){
                System.out.println(t);
        }
        public void show(Object obj){
                System.out.println(obj);
        }
}
我用泛型和不用泛型,输出的结果都没什么区别,那这样用泛型还有什么意义呢,这是输出结果
abc
123
abc
123
感觉没什么差别啊

10 个回复

倒序浏览
你这样写没有什么区别,print方法加上泛型不用强转,show方法还得强转,不知道我理解的对不对
回复 使用道具 举报
不是这么理解的
回复 使用道具 举报
金逗逗 发表于 2015-8-6 10:37
你这样写没有什么区别,print方法加上泛型不用强转,show方法还得强转,不知道我理解的对不对 ...

我记得老师举的就是这个例子,目前例子太少,我也理解不透彻
回复 使用道具 举报
泛型可以提高安全性
public <T> T f(T t){
       return t;
}
int s=(int)f("abc");//编译不通过

public  Object f(OObject t){
       return t;
}
int s=(int)f("abc");//编译通过,运行会抛出类型强转异常
回复 使用道具 举报
真实姓名被注册 发表于 2015-8-6 12:32
泛型可以提高安全性
public  T f(T t){
       return t;

我知道可以提高安全性。而且你这个例子。int s=(int)f("abc");和泛型没什么关系吧,把一个字符串强转成int没泛型也不会通过的。哎,我感觉你好像没明白我的意思
回复 使用道具 举报
kenfans 发表于 2015-8-6 13:58
我知道可以提高安全性。而且你这个例子。int s=(int)f("abc");和泛型没什么关系吧,把一个字符串强转成in ...

不用泛型,用Object编译就可以通过,到运行时才会出现异常
回复 使用道具 举报
真实姓名被注册 发表于 2015-8-6 14:01
不用泛型,用Object编译就可以通过,到运行时才会出现异常

但是我的那个程序运行也不会出现异常。老是就是举的我那个例子。所以我当时就感觉在方法上用不用泛型没什么区别。

可能是我目前见的程序少了吧,还感觉不到他的实用价值
回复 使用道具 举报
1 什么是泛型
      泛型的本质就是参数化类型,参数化类型重要性在于,允许创建一些类、接口和方法,其
      所操作的数据类型被指定为参数。例如我们可以使用泛型创建一个类,在这个类中可以自动使
      用不同类型的数据。
      class GenericClass<T>{
      …
      }
2 泛型的作用
      泛型的作用表现在,在没有泛型之前,可以使用Object 来表示或者创建通用的类、接口和
     方法,但是这样作带来后果是需要作强制类型转换,而这种转换的条件是开发人员必须预知实
     际的参数类型,同时如果强制类型转换错误,编译器在编译时并不检查或提示转换错误,但是
     一旦在运行时发现错误则会产生异常,这对于一个程序来说是非常的不安全。
     而泛型的作用则恰恰体现在程序编译时就对类型进行检查,同时不必再进行强制类型转换,
     因此处理过程得到简化,代码的重用性高,并且又安全。
3 泛型相关概念
    在学习如何使用泛型之前,还必须要了解 2 个重要的概念:
    1、参数化类型
    2、类型变量
        参数化类型:参数化类型包含一个类或者接口,以及实际的类型参数列表。
        类型变量:是一种非限定性标识符,用来指定类、接口或者方法的类型
回复 使用道具 举报
向上转型没问题,但是向下转型的时候可能出现问题。
回复 使用道具 举报
当然有区别,如果定义Object的话有的地方需要强转,我看你这个和泛型没关系吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马