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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© heheka123 中级黑马   /  2014-4-9 10:08  /  1040 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看毕老师的视频:讲的泛型方法都是没有返回值的;
  1. class Demo
  2. {
  3.         public <T> void show(T t){
  4.                 System.out.println("show:"+t);
  5.         }
  6. }
复制代码


如果我写一个有返回值的泛型方法, 应该怎么写呢?

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 苏伯亚 于 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方法需要使用泛型能力,必须使其成为泛型方法。

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
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;
        }
}

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
  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.          }
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
使用泛型只是为了提高安全性,
跟有没有返回值没有关系,
你的程序逻辑该有返回值就return,
难道JDK1.5之前,没有泛型,那些同样逻辑的程序怎么办?
理解泛型为什么出现就明白这个问题了。
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
在方法体中return要返回的对象
回复 使用道具 举报
有没有返回值和是不是泛型没有关系,如果该类或方法有返回值,那么把它写成泛型也有返回值。返回值只取决于类或方法本身。而泛型只是为了限定其类型,这样就可以在编译期防止将错误类型的对象放置到容器中。
例如:定义一个容器ArrayList,存放class Apple{}和class Orange{},用add()方法可以将Apple和Orange都放进这个容器,无论在编辑还是在运行都不会产生错误。但是当你在使用ArrayList的get()方法来取出你认为是Apple的对象时,你得到的知识Object的引用,必须将其强转成Apple,否则你就会得到语法的错误。在运行时,当你试图将Orange对象转为Apple时,你就会以前面提到的异常的形式得到一个错误。为了防止错误类型,所以可以定义泛型ArryList<Apple>。
好好理解下泛型。。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马