【java笔记】泛型:泛型类,泛型方法,泛型接口,可变参数

格式:<参数类型>
本质是参数化类型
好处:自动类型转换;提前显示异常
4.1 概述和好处

package demo10Generic;

import javafx.print.Collation;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo01 {
    public static void main(String[] args) {
        Collection<String> c=new ArrayList<String>();
        c.add("hello");
        c.add("world");
        c.add("java");
        //c.add(9527);

        Iterator<String> it = c.iterator();
        for (int i = 0; i < c.size(); i++) {
            if(it.hasNext()){
                String s = it.next();
                System.out.println(s);
            }
        }

    }
}

4.2 泛型的定义和使用

package demo10Generic;
/*
泛型类的定义和使用
 */
public class Demo02GenericClass {
    public static void main(String[] args) {
        Student stu=new Student();
        stu.setName("阿德江");
        System.out.println(stu.getName());

        Teacher te=new Teacher();
        te.setAge(11);
        System.out.println(te.getAge());

        Generic<String> s1=new Generic<>();
        s1.setT("曾凡日");
        System.out.println(s1.getT());
        
        Generic<Integer> s2=new Generic<>();
        s2.setT(23);
        System.out.println(s2.getT());
    }
}

package demo10Generic;

public class Generic<T> {
    private T t;

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }
}

4.3 泛型方法

package demo10Generic;

public class Demo03GenericMethod {
    public static void main(String[] args) {
        /*Generic2 s1=new Generic2();
        s1.show("霍元甲");
        s1.show(34);
        s1.show(true);*/

        //泛型方法改进
        Generic2 s=new Generic2();
        s.show("陈真");
        s.show(true);
        s.show(23);
        s.show(12.22);

    }
}
/*
陈真
true
23
12.22
 */
package demo10Generic;

public class Generic2 {
    /*
    public void show(String s){
        System.out.println(s);
    }
    public void show(Integer s){
        System.out.println(s);

    }
    public void show(boolean s){
        System.out.println(s);
    }*/
    //泛型方法改进
    public <T> void show(T t){
        System.out.println(t);
    }
}

4.4 泛型接口的定义和使用

package demo10Generic;

public class Demo04GenericImpl {
    public static void main(String[] args) {
        Generic3Impl<String> g3=new Generic3Impl<>();
        g3.show("郭德纲");
        g3.show("曹云金");
        Generic3Impl<Integer> ge=new Generic3Impl<>();
        ge.show(33);

    }
}
/*
郭德纲
曹云金
33
 */

接口:

package demo10Generic;
/*
泛型接口的定义格式:
修饰符 interface 接口名称<T>
 */

public interface Generic3<T> {
    void show(T t);
}

实现类:

package demo10Generic;

public class Generic3Impl<T> implements Generic3<T> {
    @Override
    public void show(T t) {
        System.out.println(t);
    }
}

4.5 类型通配符

package demo10Generic;

import java.util.ArrayList;
import java.util.List;

/*
类型通配符
格式:<?>
类型通配符上限
<?extends...>
类型通配符下限
<?super...>
 */
public class Demo05 {
    public static void main(String[] args) {
        //类型通配符
        List<?> l1= new ArrayList <Number>();
        List<?> l2=new ArrayList<Object>();
        //类型通配符上限
        List<?extends Number> l3=new ArrayList<Integer>();
        //类型通配符下限
        List<?super Number> l4=new ArrayList<Object>();

    }
}

4.6 可变参数

package demo10Generic;

import static java.lang.Integer.sum;

/*
可变参数
格式:public static void sum(int... a)
 */
public class Demo06Varable {
    public static void main(String[] args) {
        System.out.println(sum(10,29));
        System.out.println(sum(10,29,44));
        System.out.println(sum(10,29,89,107));
        System.out.println(sum(10,29,22,32,44,83));

    }
    public static int sum(int... a){
        int num=0;
        for(int i:a){
            num+=i;
        }
        return num;

    }
}

注:这里的变量是一个数组;多个参数的情况下,可变参数写到后面
4.7 可变参数的使用

package demo10Generic;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
import java.util.Set;

/*
可变参数的使用
1.List of
2.Set of
3.asList
 */
public class Demo07 {
    public static void main(String[] args) {
    //list.of不可增删改
        List<String> list1 = List.of("libai", "dufu", "wangchanglin");
        //list1.add("lihe");//UnsupportedOperationException
        //list1.remove("libai");  //UnsupportedOperationException
        //list1.set(1,"dumu");//UnsupportedOperationException
        System.out.println(list1);

//set.of不可增删,没有改
        Set<String> song = Set.of("xinqiji", "sushi", "liqingzhao");
        //song.add("yuefei");//UnsupportedOperationException
        //song.remove("xinqiji");//UnsupportedOperationException
        System.out.println(song);

//as.List 不可增删,可以改
        List<String> xian = Arrays.asList("maodun", "bingxin", "bajin");
        //xian.add("moyan");
        //xian.remove("maodun");
        xian.set(1,"moyan");
        System.out.println(xian);
    }
}
/*
[libai, dufu, wangchanglin]
[liqingzhao, xinqiji, sushi]
[maodun, moyan, bajin]
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值