Learning to use generic types

<Regular array>

Creat an arry of object type

class Test{
    Object[] arry=new Object[20];

    public Object getArry(int site) {
        return arry[site];
    }

    public void setArry(int site,int value) {
        this.arry[site] = value;
    }

    public static void main(String[] args) {
        Test test=new Test();
        test.setArry(5,0);
        int val=(int)test.getArry(0);//1.you must conversion its type to int 
        System.out.println(val);
    }
}

But ,more often ,we want it to be able to hold only one data type.

Genericty's main purpose:

 

<genericity>

public class Genericity<T> {//表示当前的类是泛型类
    //T[]arr=new T[20];

    T[]arr=(T[])new Object[20];//1.
    public T getArr(int site) {
        return arr[site];
    }

    public void setArr(int site,T value) {
        this.arr[site] = value;
    }

    public static void main(String[] args) {
        Genericity<Integer> genericity=new Genericity<>();
     //2.When do parameters  need to be passed?
        genericity.setArr(0,20);
        int val=genericity.getArr(0);
        System.out.println(val);


    }


}

 Please think about:

< erasure machanism>

<The upper bound of a generic>

 

complex

 

Example :Please use a generic classes to find the biggest element in the arry

public class GenericityTwo<T extends Comparable<T>> {
    public  T Compare(T[]arry){
        T max=arry[0];
        for (int i = 0; i <arry.length; i++) {
            if (arry[i].compareTo(max)>0){
                max=arry[i];
            }
        }
        return max;

    }

    public static void main(String[] args) {
        GenericityTwo<Integer> genericity=new GenericityTwo<>();
        Integer[]arry={20,21,22,23};
        int ret=genericity.Compare(arry);
        System.out.println(ret);
    }
}

use a static method in the generic class

 class Univversal<T extends Comparable<T>>{
    public static <T extends Comparable<T>> T compare(T[]arry){
        T max=arry[0];
        for (int i = 0; i <arry.length; i++) {
            if (arry[i].compareTo(max)>0){
                max=arry[i];
            }
        }
        return max;
    }

    public static void main(String[] args) {
       Integer[]arry={20,21,22,23};
        int ret=Univversal.<Integer>compare(arry);
        System.out.println(ret);
    }

}

<wildcard character>

public class Message<T> {
    public T message;

    public T getMessage() {
        return message;
    }

    public void setMessage(T message) {
        this.message = message;
    }

    public static void main(String[] args) {
        Message<String> message=new Message<>();
        message.setMessage("通配符");
        fun(message);
    }
    public static void fun(Message<String> message)///{
        String word=message.getMessage();
    }

}

 public static void fun(Message<?> message)
Accept all types

 

<The upper bound of the wildcard >

 

class Food{

}
class Fruit extends Food{

}
class Apple extends Fruit{

}
class Banana extends Fruit{

}
public class MessageTwo<T> {

    public T message;

    public T getMessage() {
        return message;
    }

    public void setMessage(T message) {
        this.message = message;
    }

    public static void main(String[] args) {
        Message<Apple> message=new Message<>();
        message.setMessage(new Apple());
        fun(message);
        Message<Banana> message2 = new Message<>() ;
        message2.setMessage(new Banana());
        fun(message2);
    }
    public static void fun(Message<? extends Fruit> message){
        System.out.println(message.getMessage());

    }



}

 

 Please thiking about:  

 

<The lower bound of the wildcard>

 

  Please thiking about: 

 <Packaging class>

 

 

 

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值