Generics 通用型

出现目的:我们写的类和方法,希望用的人越多越好,就像项目中经常写的公共函数。

                实现一:在类定义时带一个或多个参数 : class ArrayList<E>,HashMap<K,V> 等等。                           

具体使用:

        1、Generic class(Parameterized class) :当类定义带有参数时: class ArrayList<E>,当实例化一个类时,必须指定参数。

             1>出现在类成员中: private E a;

             2>出现在方法 返回 中:putlic E get(){retrun a};

             3>出现在方法参数中: public void set(E a){ this.a=a;}              

      2、Generic methods(Parameterized method):方法定义时带参数,类还是普通类。

          2.1:  <T> void f(T x) :通常不需要指定具体类型,编译器自己能判断(type arguent inference)

          2.2:  <T> List<T> list():当方法里不带参数时,编译器猜不出返回类型是什么。需明确指定返回类型 List<T>

          2.3 : <T> List<T> makeList(T... args):参数变量和返回类型都有。

                    makeList("a");

                    makeList("a","b"); 

一、以前用得最多“方法 参数通用”的一种方式:

       polymorphism:One way that object-oriented languages allow generalization is through polymorphism

 public class Music {
    public static void tune(Instrument i) { //基类Instrument,实际传过来的是子类,这就是方法 (参数)成为通用。
       i.play(Note.MIDDLE_C);
  }
 public static void main(String[] args) {
    Wind flute = new Wind(); 
       tune(flute); // Upcasting
   }
  }

二、类里面的成员变量成为通用型:就是在类前面加<A,B>,之后在构造函数里赋值。

   TwoTuple<A, B>:A tuple library,表示是一个数组,随便加。

  package generics;
   public class TwoTuple<A, B> {//A,B 类里面成员变量和方法都可以使用。 
public final A first;//final 表示谁用TwoTuple类,这个变量只能读,不能给变量重新赋值。
public final B second;

public TwoTuple(A a, B b) {
first = a;
second = b;
}
public String toString() {
return "(" + first + ", " + second + ")";
}
  }

package generics;
import net.mindview.util.*;

public class TupleTest {
static TwoTuple<String, Integer> f() {
// Autoboxing converts the int to Integer:
return new TwoTuple<String, Integer>("hi", 47);}

public static void main(String[] args) {
TwoTuple<String, Integer> ttsi = f();
System.out.println(ttsi);
// ttsi.first = "there"; // Compile error: fina}}    

   



          



          

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值