Java泛型

使用泛型类的优势?

可以在程序编译时而不是运行时检测出错误,保证代码安全性、可靠性

理解泛型

public class GenericStack<T> {
    private T data;
    
    public GenericStack(T data) {
        this.data = data;
    }

    public T getData() {
        return data;
    }

    public <U> void processData(U input) {
        System.out.println("Processing data: " + data);
        System.out.println("Additional input: " + input);
    }

    public static <V> void staticMethod(V value) {
        System.out.println("Static method with value: " + value);
    }

    public static void main(String[] args) {
        GenericStack<String> stringObj = new GenericStack<>("Hello, Generics!");
        System.out.println("Data: " + stringObj.getData());

        stringObj.processData(42);

        GenericStack.staticMethod("Static");

        GenericStack<Integer> integerObj = new GenericStack<>(100);
        System.out.println("Data: " + integerObj.getData());

        integerObj.processData("Generic");

        GenericStack.staticMethod(3.14);
    }
}

(原始类型:不使用类型参数的泛型类)

声明:ArrayList <String> myList = new ArrayList <>();

赋值:myList.add(“red”)

泛型类型一定是引用类型Integer String Double Float

不能是8种基本数据类型

boolean int float double long char byte short不可以

非受限通配 ?  和? extends Object一样

受限通配   ?extends扩展类型 表示T或T的一个子类型

下限通配   ?super超级类型  表示T或T的一个父类型

编译器可使用泛型信息,但这些信息在运行时是不可用的,这些类型被称为消除。

这个方法能够使泛型代码向后兼容使用原始类型的遗留代码。

 来一个编程题看看

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
 
public class ArrayListStack<E> extends ArrayList<E> {
    public int getSize() {
        return super.size();//查看栈的大小
    }
 
    public E peek() {//查看栈顶元素
        return super.get(getSize() - 1);
    }
 
    public void push(E o) {//将元素压入栈
        super.add(o);
    }
 
    public E pop() {//弹出栈顶元素
        E o = super.get(getSize() - 1);
        super.remove(getSize() - 1);
        return o;
    }
 
    public boolean isEmpty() {//判断是否栈空
        return super.isEmpty();
    }
 
         //重写toString字符串方法,用字符串形式表示栈
    @Override
    public String toString() {
        return "stack: " + super.toString();
    }
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Please enter five strings");
                   //创建一个ArrayListStack对象
        ArrayListStack<String> stack=new ArrayListStack<String>();
        Scanner scan=new Scanner(System.in);
                 //依次将五个字符串push入栈
        for(int i=0;i<5;i++)
        {
            stack.push(scan.nextLine());
        }
        System.out.println(stack);//打印原始栈
        Collections.reverse(stack);//逆序
        System.out.println(stack);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值