• 泛型 通配符 泛型接口


    package cn;
    class Message <T> {
        private T msg ;
    
        public T getMsg() {
            return msg;
        }
        public void setMsg(T msg) {
            this.msg = msg;
        }
        
    }
    public class Test {
    
        public static void main(String[] args) {
            Message <String > m = new Message<String>() ;
            m.setMsg("Hello world ") ;
            fun(m) ;
        }
        public static void fun(Message <String> temp){
            System.out.println(temp.getMsg()) ;
        }
    }

    以上的代码为Message设置的是String对象类型

    如果设置成:

    Message <Integer > m = new Message<Integer>() ;
            m.setMsg(100) ;

    则fun()函数出错误了

    解决方法1.  不设置参数的参数

    public static void fun(Message  temp){

        但是出现的问题是:

    public static void fun(Message  temp){
            temp.setMsg("Hello") ;    ·  //变成了String类型
            System.out.println(temp.getMsg()) ;
        }

        所以现在要做的只能是让数据只能取出不能设置

    public static void fun(Message <?> temp){

        使用  “ ? ”

      . ?extends类 : 设置泛型上限

      比如 ? extends Number   : 可以设置 Number 的子类(Integer ,Doub)等

    package cn;
    class Message <T  extends Number> {
        private T msg ;
    
        public T getMsg() {
            return msg;
        }
        public void setMsg(T msg) {
            this.msg = msg;
        }
        
    }
    public class Test {
    
        public static void main(String[] args) {
            Message <Integer > m = new Message<Integer>() ;
            Message <Double> m1 = new Message<Double>() ;
            m.setMsg(100) ;
            fun(m) ;
        }
        public static void fun(Message <? extends Number> temp){        
            System.out.println(temp.getMsg()) ;
        }
    }

     

     . ?super 类 : 设置泛型下限

      比如 ?super : 设置String 或者他的父类 (Object) 等

    接口

    定义接口的时候要定义子类,

    1.在子类设置泛型

    //如果是接口在前面加上字母I    ,例如IMessage
    //如果是抽象类加上Abstract,例如AbstractMessage
    interface IMessage <T>{
        public void print(T t ) ;
    }
    class MessageImpl <T> implements IMessage<T>{
        public void print(T t){
            System.out.println(t) ;
        }
    }
    public class Test {
    
        public static void main(String[] args) {
            IMessage <String > msg = new MessageImpl<String>() ;
            msg.print("hello") ;
        }
        
    }

    2.在子类不设置泛型

    interface IMessage <T>{
    	public void print(T t ) ;
    }
    class MessageImpl  implements IMessage<String>{
    	public void print(String t){
    		System.out.println(t) ;
    	}
    }
    public class Test {
    
    	public static void main(String[] args) {
    		IMessage <String > msg = new MessageImpl() ;
    		msg.print("hello") ;
    	}
    	
    }
    
  • 相关阅读:
    java 新建文件夹保存
    android AppWidgwtProvider学习
    GPS定位
    android ContentProvider学习
    Android 解屏幕锁与点亮屏幕(来电时效果)
    RecyclerView 分页滑动,设置可以滑动下一页,下一个item作为起点方法
    Glide 加载图片 到动态ImageView
    一个例子了解 HandlerThread,Looper,ThreadLocal,Handler,MessageQueue,Message的关系
    android TabLayout 相关
    屏幕相关
  • 原文地址:https://www.cnblogs.com/da-peng/p/5170481.html
Copyright © 2020-2023  润新知