泛型的简单应用 --《JAVA编程思想》 52

泛型:指某种不具体的类型。泛型只有在赋值的时候才确定具体类型,增强了代码的适用性。

今天和大家分享泛型的常见应用场景。

1.在接口中使用泛型

在接口使用泛型,需在类名后面定义泛型 T ,并用 <> 包裹起来。

不同的类实现接口时,可以指定不同的具体类型。

public interface GeneratorFactory<T> {
    T newInstance();
}
public class Coffee {}
public class CoffeeFactory implements GeneratorFactory<Coffee> {
    @Override
    public Coffee newInstance() {
        return new Coffee();
    }
}

public class Fruit {}
public class FruitFactory implements GeneratorFactory<Fruit> {
    @Override
    public Fruit newInstance() {
        return new Fruit();
    }
}

2.在类中使用泛型

在类中使用泛型与接口中基本一致,传入的泛型可在类中作为私有域进行使用。

public class Plate<T> {

    private T item;

    public Plate(T item) {
        this.item = item;
    }

    @Override
    public String toString() {
        return item.toString();
    }
    
}
public class Fruit {

    @Override
    public String toString() {
        return "Fruit{}";
    }

}
public class Coffee {

    @Override
    public String toString() {
        return "Coffee{}";
    }

}
public class PlateTest {

    public static void main(String[] args) {
        Plate<Coffee> coffeePlate = new Plate<>(new Coffee());
        System.out.println(coffeePlate.toString());
        Plate<Fruit> fruitPlate = new Plate<>(new Fruit());
        System.out.println(fruitPlate.toString());
    }

}
Coffee{}
Fruit{}

3.在方法中使用泛型

在方法中使用泛型,不仅需要将方法中的参数定义为泛型,还需要在方法的返回值前进行声明。

public class GenericMethods {

    public <T> void getClassName(T t) {
        System.out.println(t.getClass().getName());
    }

    public static void main(String[] args) {
        GenericMethods gm = new GenericMethods();
        gm.getClassName("abc");
        gm.getClassName(123);
        gm.getClassName(1.2F);
        gm.getClassName(2.4);
        gm.getClassName(2300L);
    }
    
}
java.lang.String
java.lang.Integer
java.lang.Float
java.lang.Double
java.lang.Long

4.定义多个泛型

这里可能有同学会说,假设我同时需要定义多个泛型,该怎么办呢?

很简单,在 <> 中接着声明即可。

4.1 在接口中定义多个泛型

public interface GeneratorFactoryExpand<T, E> {

    T newInstanceT();

    E newInstanceE();

}

4.2 在类中定义多个泛型

public class PlateExpand<T, E> {

    private T item;

    private E element;

    public PlateExpand(T item, E element) {
        this.item = item;
        this.element = element;
    }

    @Override
    public String toString() {
        return "PlateExpand{" +
                "item=" + item +
                ", element=" + element +
                '}';
    }
    
}

4.3 在方法中定义多个泛型

public class GenericMethodsExpand {

    public <T, E> void getClassName(T t, E e) {
        System.out.println(t.getClass().getName());
        System.out.println(e.getClass().getName());
    }

}

本次分享至此结束,希望本文对你有所帮助,若能点亮下方的点赞按钮,在下感激不尽,谢谢您的【精神支持】。

若有任何疑问,也欢迎与我交流,若存在不足之处,也欢迎各位指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BaymaxCS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值