精华内容
下载资源
问答
  • 泛型中上界下界定义 泛型中上界下界定义 上界<? extends Fruit> 下界<? super Apple> 上界的list只能get,不能add除null之外的任何对象,包括Object 下界的list只能add,不能get

    java泛型中上界下界的定义

    泛型中上界下界的定义

    上界<? extends Fruit>
    下界<? super Apple>
    上界的list只能get,不能add除null之外的任何对象,包括Object
    下界的list只能add,不能get
    Demo

    展开全文
  • java泛型的上界下界

    千次阅读 2019-01-20 22:06:28
    java泛型的上界下界的demo。 package java28_reflect; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 泛型上下界 */ public class ...

    java泛型的上界下界的demo。

    
    import java.sql.Timestamp;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    /**
     * 泛型上下界
     */
    public class UpAndDownGeneric {
    	
    	/**
    	 * 1、上界可以读取成上界类型Date,但是不能存储,因为这个实际类型有可能是子类,而你指定Date不行,Date的下级也不行,依次同理。
    	 */
    	public void upperBound(List<? extends Date> list, Date date){  
    	    Date now = list.get(0);  //这里当然也可以用Object接受。
    	    System.out.println("now==>" + now);  
    	   // list.add(date); //这句话无法编译  
    	    list.add(null); //这句可以编译,null没有类型信息  
    	}
    	
    	/**
    	 * 比如下面这个方法,泛型是Timestamp类型,而add的时Date类型。
    	 * 上界读不能存,因为泛型类型可能无限小,任何参数的类型都不能直接使用。
    	 */
    	public void testUpperBound(){  
    	    List<Timestamp> list = new ArrayList<Timestamp>();  
    	    Date date = new Date();  
    	    upperBound(list,date);  
    	}  
    	
    	/**
    	 * 解决,声明List泛型为T,在方法定义T为Date子类,那么传递的类型永远符合T的类型了。就可以添加了。
    	 */
    	public <T extends Date> void upperBound2(List<T> list, T date){  
    	    T now = list.get(0);  
    	    System.out.println("now==>" + now);  
    	    list.add(date); //这句话无法编译  
    	    list.add(null); //这句可以编译,null没有类型信息  
    	}
    	
    	/**
    	 * 2、下界不能够读,可以写,因为泛型实际类型都大于Timestamp,所以放心的写,而读的话,不知道返回什么类型了。
    	 */
    	public void lowerBound(List<? super Date> list){  
    		Date now = new Date(System.currentTimeMillis());  
    	    list.add(now);
    	    list.add(new Timestamp(System.currentTimeMillis())); //可以添加比Date小的类型。
    	    //Date time = list.get(0); //需要强转成Object,才能读。
    	}  
    	
    	/**
    	 * 比如下面这个:list符合泛型限制,但是添加的是一个Object,所以在lowerBound调用时,get要强转成Object.
    	 */
    	public void testLowerBound(){  
    	    List<Object> list = new ArrayList<>();  
    	    list.add(new Object());  
    	    lowerBound(list);  
    	}
    	
    	//一句话总结:
    	//泛型上界 <? extends 上界类型> 和 泛型下界<? super 下界类型> 
    	//如果是进行读取操作,那么就要能够装的下泛型类型的,即看2种泛型的最大类型,其中上界是上界类型,下界是Object。
    	//如果时写入操作,那么就要看泛型类型的最小的具体类型及其子类,所以上界不可写,下界可以写入下界类型及子类。
    	
    }
    

     

    展开全文
  • scala 的上界下界

    2019-10-30 19:21:50
    二、上界下界 (1)介绍 (2)示例 1)上界示例 2)下界示例 一、泛型 总结:T <: Comparable[T] 表示T比Comparable年龄小,所以T必须为Comparable的子类。相反,T >: Son,T为Son的父类。 (1)泛.....

    目录

     

    一、泛型

    (1)泛型的介绍

    (2)泛型类、泛型方法

    (3)示例

    1)定义泛型类

    2)定义泛型方法

    二、上界和下界

    (1)介绍

    (2)示例

    1)上界示例

    2)下界示例


    一、泛型

    总结:T <: Comparable[T] 表示T比Comparable年龄小,所以T必须为Comparable的子类。相反,T >: Son,T为Son的父类。

    (1)泛型的介绍

    泛型用于指定方法或类可以接受任意类型参数,参数在实际使用时才被确定,泛型可以有效地增强程序的适用性,使用泛型可以使得类或方法具有更强的通用性。

    (2)泛型类、泛型方法

    泛型类:指定类可以接受任意类型参数。 

    泛型方法:指定方法可以接受任意类型参数。

    (3)示例

    1)定义泛型类

    /* 下面的意思就是表示只要是Comparable就可以传递,下面是类上定义的泛型
      */
    class GenericTest1[T <: Comparable[T]] {
     
      def choose(one:T,two:T): T ={
        //定义一个选择的方法
        if(one.compareTo(two) > 0) one else two
      }
     
    }
     
    class Boy(val name:String,var age:Int) extends Comparable[Boy]{
      override def compareTo(o: Boy): Int = {
        this.age - o.age
      }
    }
     
    object GenericTestOne{
      def main(args: Array[String]): Unit = {
        val gt = new GenericTest1[Boy]
        val huangbo = new Boy("huangbo",60)
        val xuzheng = new Boy("xuzheng",66)
        val boy = gt.choose(huangbo,xuzheng)
        println(boy.name)
      }
    }

    运行结果:

    2)定义泛型方法

    class GenericTest2{
      //在方法上定义泛型
      def choose[T <: Comparable[T]](one:T,two:T): T ={
        if(one.compareTo(two) > 0) one else two
      }
     
    }
     
    class Boy(val name:String,var age:Int) extends Comparable[Boy]{
      override def compareTo(o: Boy): Int = {
        this.age - o.age
      }
    }
     
    object GenericTestTwo{
      def main(args: Array[String]): Unit = {
        val gt = new GenericTest2
        val huangbo = new Boy("huangbo",60)
        val xuzheng = new Boy("xuzheng",66)
        val boy = gt.choose(huangbo,xuzheng)
        println(boy)
      }
    }

    运行结果:

    二、上界和下界


    (1)介绍


    在指定泛型类型时,有时需要界定泛型类型的范围,而不是接收任意类型。比如,要求某个泛型类型,必须是某个类的子类,这样在程序中就可以放心的调用父类的方法,程序才能正常的使用与运行。此时,就可以使用上下边界Bounds的特性; 

    Scala的上下边界特性允许泛型类型是某个类的子类,或者是某个类的父类;

    (1) S <: T

    这是类型上界的定义,也就是S必须是类型T的子类(或本身,自己也可以认为是自己的子类)。

    (2) U >: T

    这是类型下界的定义,也就是U必须是类型T的父类(或本身,自己也可以认为是自己的父类)。

    (2)示例


    1)上界示例


    参考上面的泛型方法

    2)下界示例

    class GranderFather
    class Father extends GranderFather
    class Son extends Father
    class Tongxue
    
    object Card{
      def getIDCard[T >: Son](person:T): Unit ={
        println("OK,交给你了")
      }
      def main(args: Array[String]): Unit = {
        getIDCard(new Father)
        getIDCard(new GranderFather)
        getIDCard(new Son)
        //getIDCard[GranderFather](new Tongxue)//报错,所以注释
    
      }
    }
    

     结果:

    展开全文
  • c++算法的上界下界

    2020-12-09 15:38:40
    整 取下界(向量<整>&大,整 值){//最后两位表区间,即比值刚好>=的东西. 整 i=0,j=大.大小(),o,k,c=j-i; 当(c>0){// k=c/2;o=大[i+k];//k=1 如(o<值){i+=k+1;c-=k+1;}异 c=k; } 中 i; }//...
    整 取下界(向量<>&,整 值){//最后两位表区间,即比值刚好>=的东西.
        整 i=0,j=.大小(),o,k,c=j-i;(c>0){//
            k=c/2;o=[i+k];//k=1(o<){i+=k+1;c-=k+1;}异 c=k;
        }
        中 i;
    }//向量<T>是从小到大排好序的.上界,取>的首个.
    整 取上界(向量<>&,整 值){//下界,取>=的首个
        整 i=0,j=.大小(),o,k,c=j-i;(c>0){//与下界的差别只有一个地方
            k=c/2;o=[i+k];//k=1(o<=){i+=k+1;c-=k+1;}异 c=k;
        }
        中 i;
    }
    //上界与下界的区别只有一个等号.上界,要求是大于才算.而下界是大于等于就算.
    
    
    空 主(){
        向量<>m{25,54,66,98,100,117};
        整 t=取上界(m,99);打印(t);
        t=取上界(m,98);打印(t);
        t=取上界(m,97);打印(t);
        打印(m);
    }
    
    
    展开全文
  • 首先我说一下协变,所谓协变,白话文就是说让你的能够使用比原始定义类型的子类。不要懵逼,光看字我本人也看不懂,那么我们来通过实际的例子来讲解一下,首先上代码: /** * Created by mahuichao on 16/8/4.
  • //是泛型,A是以B为上界的,或者说B是以A为下界的。返回是上界B,list是协变的,函数的参数(x:B)其实是逆变的。 //函数的参数时逆变的,就不能保持函数的返回结果类型是协变的了。使得list可以容纳具体的上界的...
  • scala协变逆变上界下界---理解篇

    千次阅读 2014-04-30 12:02:28
    Scala的协变和逆变上界下界 1. 引子: 为了弄懂scala中协变和逆变这两个概念,查阅了不少资料,但是还是要自己总结一下,会记得比较深刻。 那就从java和scala的对比说起吧。 java中: 如果你很理解...
  • 四、下界上界 1、下界  下界使用符合 >: 表示,比如下面这段代码中表示类型 U 是类型 T 的父类,即此处的类型 U 最少为 T ,不能比 T 的类型更低。 def enqueue[ U >: T ]( x: U ) = new Queue[ U ]...
  •   类型的上界下界,是用来定义类型变量的范围,作用于类。 scala上界(Upper Bounds)   scala中上界定义[S <:T]类似于java中上界定义<? extends T>。 定义 S <: T 这是类型上界定义,S必须是类型...
  • 1、泛型中的上界下界定义 上界<? extends animal> 下界<? extends bird> 2、上界下界的特点 上界的list只能get,不能add(确切地说不能add出除null之外的对象,包括Object) 下界的list只能add,...
  • 【离散数学】偏序关系上界下界

    千次阅读 2021-01-19 10:46:10
    一直没搞懂这个上界下界的关系
  • 前言 在指定泛型类型是,有时需要界定泛型类型的范围,而不是接收任意类型。比如,要求某个泛型类型,必须是某个类的子类,这样在程序...1. 上下届定义 注意:Scala中泛型使用A,B,C…Z表示,比如A就是所有类的子类...
  • scala上界Variance refers as how subtyping between complex types relates to subtypes of their components. Scala supports variances annotations of type parameters of a generic class. 差异是指复杂类型...
  • 文章目录泛型类型约束上下界上界下界视图界定上下文界定 泛型 使用示例 def test={ //应用1 val msg = new IntMessage(1) println(msg) val msg2 = new StringMessage[String]("class") println(msg2) //应用2...
  • 这是类型下界定义。也就是U必须是类型T的父类(或本身,自己也可以认为是自己的父类)。 上界的例子 协变: Scala的类或特征的范型定义中,如果在类型参数前面加入+符号,就可以使类或特征变为协变了。 ...
  • // 我们通过引入一个新的类型参数 U 来实现这一点,该参数具有 B 作为类型下界 trait Node[+B] { def prepend[U >: B](elem: U): Node[U] } case class ListNode[+B](h: B, t: Node[B]) extends Node[B] { def ...
  • scala-协变、逆变、上界下界 当我们定义一个协变类型List[A+]时,List[Child]可以是List[Parent]的子类型。 当我们定义一个逆变类型List[-A]时,List[Child]可以是List[Parent]的父类型。 Scala的协变 看...
  • 1、上界下界:Upper bound,lower bound 作用:规定泛型的取值范围 Int x 100 <= x <= 200 下界 上界 (*)规定泛型的取值范围 ...
  • Scala中的协变,逆变,上界下界等 目录[−] Java中的协变和逆变 Scala的协变 Scala的逆变 下界lower bounds 上界upper bounds 综合协变,逆变,上界下界 View Bound <% Context Bound 参考文档...
  • day08,我们学习了scala的集合、模式匹配、样本类。今天学习scala的泛型、上界下界、隐式转换。
  • 目录示例极小元与极大元最小元与最大元上界下界最小上界(上确界)和最大下界(下确界) 示例 示例是整除关系,C表示全集{1,2,3,6,12,24,36}。为方便理解,由下往上分为5行。 极小元与极大元 定义: 判断标准:列出...
  • java 泛型中的上界(extend)和下界(super)

    万次阅读 多人点赞 2017-01-20 17:27:09
    1. 泛型中上界下界定义 上界 下界 2.上界下界的特点 上界的list只能get,不能add(确切地说不能add出除null之外的对象,包括Object) 下界的list只能add,不能get import java.util.ArrayList; import ...
  • 定义:逆变和协变用来描述类型转换后的继承关系。 我们用F(X)来表示类型转换,X,Y代表类型,≤代表继承关系(如X ≤ Y表示A是B的子类)协变:已知X ≤ Y,且F(X) ≤ F(Y)。 逆变:已知X ≤ Y,且F(Y) ≤ F(X)。 ...
  • ? 通配符类型 ... 表示类型下界,? 表示参数化类型是此 T 类型的超类型 (父类型),直至 Object 上界<? extends T>不能往里存,只能往外取 比如,我们现在定义:List<? extends T>首先你...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,289
精华内容 6,115
关键字:

上界下界定义