Java中的泛型

泛型方法

泛型方法的定义格式及范例如下。

定义格式:修饰符 <类型> 返回值类型 方法名(类型名 变量名){}

范例:public <T> void show(T t){}

package com.fzy.demo02;

//在不使用泛型的情况下,如果名字相同的方法想传递不同类型的参数,则使用方法重载的方式来实现
/*public class Generic {
    public void show(String s) {
        System.out.println(s);
    }

    public void show(Integer i) {
        System.out.println(i);
    }

    public void show(Boolean b) {
        System.out.println(b);
    }
}*/


/*
public class Generic<T> {
    public void show(T t) {
        System.out.println(t);
    }
}*/

//泛型方法。使用泛型方法时,可以省略多个方法的重载,而且在实例化对象的时候也不需要实例化多个对象
public class Generic {
    public <T> void show(T t) {
        System.out.println(t);
    }

}
package com.fzy.demo02;

public class GenericTest2 {
    /*public static void main(String[] args) {
        //在实体类中使用方法重载的时候只需要实例化一个对象,但是需要重载多个成员方法
        Generic g = new Generic();
        g.show("String");
        g.show(911);
        g.show(true);
    }*/

    /*public static void main(String[] args) {
        //使用泛型类时,实体类中需要一个方法,但在调用的时候需使用不同的泛型实例化多个对象
        Generic<String> strG = new Generic<>();
        strG.show("String");

        Generic<Integer> intG = new Generic<>();
        intG.show(911);

        Generic<Boolean> bolG = new Generic<>();
        bolG.show(true);
    }*/

    public static void main(String[] args) {
        //使用泛型方法时,只需要实例化一个对象就可以传递不同的参数,实现类似重载成员方法的效果
        Generic g = new Generic();
        g.show("String");
        g.show(911);
        g.show(true);
    }
}

泛型接口

 泛型接口的定义格式及范例如下。

定义格式:修饰符 interface 接口名<类型>{}

范例:public interface Generic<T>{}

 

 可变参数 

可变参数又称为参数个数可变,当将其用作方法的参数时,方法参数的个数就是可变的。可变参数的定义格式及范例如下。

定义格式: 修饰符 返回值类型 方法名(数据类型...变量名)

范例: public static int sum(int...a)。

package com.fzy.demo04;

/**
 * @Description: TODO 可变长参数
 */
public class Demo02 {
    public static void main(String[] args) {
        System.out.println(mySum(1, 2));
        System.out.println(mySum(1, 2, 3));
        //System.out.println(mySum(mySum(1, 2), mySum(3, 4)));
        System.out.println(mySum(1, 2, 3, 4));
        System.out.println(mySum(1, 2, 3, 4, 5));

        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        System.out.println(mySum(6, arr));

    }

//    private static int mySum(int[] a){
//        return 0;
//    }//形参为数组的只能接收数组作为参数


    /**
     * 通过可变长参数求和
     * @param a  数组 (可变长参数格式)
     * @return  结果
     * 可变长参数可以接收任意个数的同类型数据
     * 也可以接收数据类型相应的数组
     * 可变长参数和普通参数连用的时候,必须放在参数列表的最后
     */

    private static int mySum(int x, int ... a) {
        int sum = 0;
        /*for (int i : a) {
            sum += i;
        }*/

        for (int i = 0; i < a.length; i++) {
            sum += a[i];
        }
        return sum;
    }


}

 可变参数作为形参既可以接收任意个数的同类型数据也可以接收数组,也就是说当你参数传递一个int[],两个函数都能匹配上,因此会提示你函数已经存在了。

所属类方法名说明
Arrays
public static <T> List<T> asList(T... a)
返回由可变参数组成的固定长度的列表
List
public static <E> List<E> of(E... e)
返回包含任意数量元素的不可变列表
Set
public static <E> Set<E> of(E... e)
返回一个包含任意数量元素的不可变集合
package com.fzy.demo04;

import java.util.Arrays;
import java.util.List;
import java.util.Set;

/**
 * @Description: TODO  API中使用可变长参数
 */
public class Demo03 {
    public static void main(String[] args) {

        List<String> list1 = Arrays.asList("Hello", "world", "Java", "MySQL");
        //list1.add("JavaScript");   //UnsupportedOperationException
        //list1.remove(1);           //UnsupportedOperationException
        list1.set(1,"Python");
        System.out.println(list1);
        //不允许添加和删除,可以修改,因为添加和删除会修改列表的长度

        
        List<String> list2 = List.of("111", "222", "333");
        //list2.add("JavaScript");      //UnsupportedOperationException
        //list2.remove(1);              //UnsupportedOperationException
        //list2.set(1,"Python");        //UnsupportedOperationException
        System.out.println(list2);
        //增删改都不允许


        Set<String> set = Set.of("111", "222", "333");
        //set.add("JavaScript");          //UnsupportedOperationException
        //set.remove("222");              //UnsupportedOperationException
        System.out.println(set);
        //不支持增删,没有索引所以不能修改

    }
}

main方法中的args参数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值