java泛型demo

1.泛型类

普通的类

 

public class Dog {
    private Object age;

    public Dog(Object age) {
        this.age = age;
    }

    public Object getAge() {
        return age;
    }

    public static void main(String[] args) {
        Dog dog=new Dog("28");
        System.out.println(dog.getAge());
    }
}

这样的代码是完全可以执行了,那为什么还需要泛型类?

1.安全性

public class Dog {
    private Object age;

    public Dog(Object age) {
        this.age = age;
    }

    public Object getAge() {
        return age;
    }

    public static void main(String[] args) {
        Dog dog=new Dog("28");
        Integer age=(Integer) dog.getAge();
        System.out.println(age);
    }
}

上面的代码编译是完全可以通过的,但是执行的时候就会出现ClassCastException异常
2.可读性好,省去了反复的强制类型转换。

 

对于泛型类,java编译器会将泛型代码转换成普通的非泛型代码,

所以对于虚拟机来说,是没有泛型类的概念的。
为什么这么设计呢?应为泛型是jdk6以后才有的,为了向下兼容。

泛型方法:

public class TestMethod {
    public static <T> boolean isHas(T[] arr, T elemt){
        for(T t:arr){
            if(t.equals(elemt)){
                return true;
            }
        }
        return false;
    }
    public <S> boolean isString(S s){
       if(s instanceof String){
           return true;
       }
       return false;
    }

    public static void main(String[] args) {
        Integer[] arr={1,5,6,8};
        System.out.println(isHas(arr,8));
        TestMethod testMethod=new TestMethod();
        System.out.println(testMethod.isString(5));
    }
}

一个方法是不是泛型和他的类是不是泛型没有任何关系。
泛型方法需要在方法的返回值前先声明,在从后面的代码中使用。

泛型接口:
参照Comparable接口。

public class TestComparable implements MyComparable<TestComparable>{

    private Integer n;

    public TestComparable(int n) {
        this.n = n;
    }

    @Override
    public boolean isEquals(TestComparable testComparable) {
        return this.n.intValue()==testComparable.getN().intValue()?true:false;
    }

    public Integer getN() {
        return n;
    }

    public static void main(String[] args) {
        TestComparable testComparable1=new TestComparable(2);
        TestComparable testComparable2=new TestComparable(2);
        System.out.println(testComparable1.isEquals(testComparable2));
    }
}
interface MyComparable<T> {
    boolean isEquals(T t);
}

类型参数继承某个类

/**
 * 测试继承class
 */
public class TestInheritClass<T extends  Father>{
    private T t;

    public TestInheritClass(T t) {
        this.t = t;
    }

    void output(){
        System.out.println(t.getName());
    }

    public static void main(String[] args) {
        Child child=new Child("李逵");
        TestInheritClass<Child> t=new TestInheritClass<>(child);
        t.output();
    }
}
class Father{
    private String name;

    public String getName() {
        return name;
    }

    public Father(String name) {
        this.name = name;
    }
}
class Child extends Father{
    public Child(String name) {
        super(name);
    }

}

 

/**
 * 测试继承接口
 */
public class TestInheritInterface<T extends IFruits> {
    private T t;

    public TestInheritInterface(T t) {
        this.t = t;
    }
    void output(){
        t.shape();
    }

    public static void main(String[] args) {
        Apple apple=new Apple();
        TestInheritInterface<Apple> t=new TestInheritInterface<>(apple);
        t.output();
    }
}
interface IFruits{
    //形状
    void shape();
}
class Apple implements IFruits{
    @Override
    public void shape() {
        System.out.println("苹果是圆形的。");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值