• 泛型 通配符 泛型接口


    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随机生成四则运算
    初涉猎软件工程的一些疑问
    201671010124 2016-2017-2 《Java程序设计》
    201671010124 2016-2017-2 《Java程序设计》2
    201671010124 2016-2017-2 《Java程序设计》初见Java
    《贪吃蛇》局部刷新法(C语言,字符界面)
    简单的《贪吃蛇》全局刷新法(C语言,字符界面)
    读取本地的json文件
    js获取当前页面的URL并且截取?之后的数据,返回json
    全面实用的Tab切换
  • 原文地址:https://www.cnblogs.com/da-peng/p/5170481.html
Copyright © 2020-2023  润新知