黑马程序员技术交流社区

标题: 关于泛型的问题 [打印本页]

作者: heheka123    时间: 2014-4-9 10:08
标题: 关于泛型的问题
看毕老师的视频:讲的泛型方法都是没有返回值的;
  1. class Demo
  2. {
  3.         public <T> void show(T t){
  4.                 System.out.println("show:"+t);
  5.         }
  6. }
复制代码


如果我写一个有返回值的泛型方法, 应该怎么写呢?
作者: 苏伯亚    时间: 2014-4-9 11:00
本帖最后由 苏伯亚 于 2014-4-9 11:03 编辑

泛型方法:  是否拥返回值,与其所在的类是否泛型没有关系。要定义泛型方法,只需将泛型参数列表置于返回值前。
如:
public class ExampleA { 
public <T> void f(T x) {
  System.out.println(x.getClass().getName());
 } 
       public static void main(String[] args) {  
        ExampleA ea = new ExampleA();
      ea.f(" ");
     ea.f(10);
      ea.f('a');
      ea.f(ea);
 }
}
输出结果:java.lang.String
                 java.lang.Integer
                 java.lang.Character
                ExampleA   
使用泛型方法时,不必指明参数类型,编译器会自己找出具体的类型。泛型方法除了定义不同,调用就像普通方法一样。  
需要注意,一个static方法,无法访问泛型类的类型参数,所以,若要static方法需要使用泛型能力,必须使其成为泛型方法。


作者: lren    时间: 2014-4-9 11:23
package heima.demo;


public class GenericsDemo {

        public static void main(String[] args) {
                String test = test("test");
                System.out.println(test);
        }

        //定义带有返回值的泛型
        public static <T> T test(T t) {
                return t;
        }
}

作者: 你好!默默    时间: 2014-4-10 16:59
  1. static void Main(string[] args)
  2.          {
  3.              Say<string>("abc");
  4.          }

  5.       
  6.          public static T Say<T>(string str)
  7.          {
  8.              T t1 = default(T);
  9.              t1 = (T)str;
  10.              return t1;
  11.          }
复制代码

作者: linweiwen    时间: 2014-4-10 17:32
使用泛型只是为了提高安全性,
跟有没有返回值没有关系,
你的程序逻辑该有返回值就return,
难道JDK1.5之前,没有泛型,那些同样逻辑的程序怎么办?
理解泛型为什么出现就明白这个问题了。
作者: caijunsong    时间: 2014-4-10 21:03
  1. class Demo
  2. {

  3.         public <T>  T void show(T t){

  4.                 T i;
  5.                                 i=t的运算表达式
  6.                                 System.out.println("show:"+t);
  7.                                 return i;
  8.         }

  9. }
复制代码

作者: 王春蕾    时间: 2014-4-11 16:36
在方法体中return要返回的对象
作者: 天涯追梦    时间: 2014-4-12 15:42
有没有返回值和是不是泛型没有关系,如果该类或方法有返回值,那么把它写成泛型也有返回值。返回值只取决于类或方法本身。而泛型只是为了限定其类型,这样就可以在编译期防止将错误类型的对象放置到容器中。
例如:定义一个容器ArrayList,存放class Apple{}和class Orange{},用add()方法可以将Apple和Orange都放进这个容器,无论在编辑还是在运行都不会产生错误。但是当你在使用ArrayList的get()方法来取出你认为是Apple的对象时,你得到的知识Object的引用,必须将其强转成Apple,否则你就会得到语法的错误。在运行时,当你试图将Orange对象转为Apple时,你就会以前面提到的异常的形式得到一个错误。为了防止错误类型,所以可以定义泛型ArryList<Apple>。
好好理解下泛型。。





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