精华内容
下载资源
问答
  • 范型通配符和限定

    2019-10-20 17:12:29
    当使用范型类或者接口时,传递的具体的类型不确定,可以通过通配符表示. 如果想要对被使用的集合中元素类型进行限定,使用范型的限定 //Person是要被使用的集合的父类 上限: ? extends E //接收E的子类 下限: ? ...
    private static void printList(Collection<? extends Person> list){
                for(Iterator<Person> it = list.iterator();it.hasNext();){
                	//Person p = it.next();
                    System.out.println(it.next().toString());
                }
            }
    

    当使用范型类或者接口时,传递的具体的类型不确定,可以通过通配符< ? >表示.

    如果想要对被使用的集合中元素类型进行限定,使用范型的限定< ? extends Person>
    //Person是要被使用的集合的父类

    上限: ? extends E //接收E的子类
    下限: ? super E //接收E的父类

    public static <T extends Comparable<? super T>> T getMax(Collection<? extends T> c){}
    

    第一个T是范型函数,
    第二个T表示只有Comparable的子类能用这个函数
    第三个T表示这个函数的返回类型为T
    第四个T表示传递的的参数是T的父类

    展开全文
  • java范型通配符

    2016-08-30 14:19:00
    只看尖括号里边的!!明确点和范围两个概念 如果尖括号里的是一个类,那么尖括号里的就是一个点,比如List 如果尖括号里面带有问号,那么代表一个范围,<? extends A> 代表小于等于A的范围,代表大于等于A的范围,...
    1. 只看尖括号里边的!!明确点和范围两个概念
    2. 如果尖括号里的是一个类,那么尖括号里的就是一个点,比如List<A>
    3. 如果尖括号里面带有问号,那么代表一个范围,<? extends A> 代表小于等于A的范围,<? super A>代表大于等于A的范围,<?>代表全部范围
    4. 尖括号里的所有点之间互相赋值都是错,除非是俩相同的点
    5. 尖括号小范围赋值给大范围,对,大范围赋值给小范围,错。如果某点包含在某个范围里,那么可以赋值,否则,不能赋值
    6. List<?>List 是相等的,都代表最大范围
    7. 补充:List既是点也是范围,当表示范围时,表示最大范围
    class A {}
    class B extends A {}
    class C extends A {}
    class D extends B {}
    Which four statements are true ?
    
    //正确的
    The type List<A>is assignable to List.
    The type List<Object>is assignable to List<?>.
    The type List<D>is assignable to List<?extends B>.
    The type List<?extends B>is assignable to List<?extends A>.
    
    //错误的
    The type List<B>is assignable to List<A>.
    The type List<?extends A>is assignable to List<A>.
    The type List<Object>is assignable to any List reference.
    展开全文
  • Java中范型通配符

    2017-10-19 22:02:52
    泛型: 泛型只是在 编译期 保证对象类型相同的技术 真正在代码的运行期,jvm会擦出泛型的存在; 1. 只看尖括号里边的!!明确点和范围两个概念 2. 如果尖括号里的是一个类,那么尖括号里的就是一个点,比如List,...

    泛型:

    泛型只是在 编译期 保证对象类型相同的技术

    真正在代码的运行期,jvm会擦出泛型的存在;


    ex.true:
    The type List<A>is assignable to List;
    The type List<Object>is assignable to List<?>
    The type List<D>is assignable to List<?extends B>
    The type List<?extends B>is assignable to List<?extends A>
    ex.false:

    The type List<B>is assignable to List<A>
    The type List<?extends A>is assignable to List<A>
    The type List<Object>is assignable to any List reference //List<Object> error

    1. 只看尖括号里边的!!明确点和范围两个概念
    2. 如果尖括号里的是一个类,那么尖括号里的就是一个点,比如List<A>,List<B>,List<Object>
    3. 如果尖括号里面带有问号,那么代表一个范围,<? extends A> 代表小于等于A的范围,<? super A>代表大于等于A的范围,<?>代表全部范围
    4. 尖括号里的所有点之间互相赋值都是错,除非是俩相同的点
    5. 尖括号小范围赋值给大范围,对,大范围赋值给小范围,错。如果某点包含在某个范围里,那么可以赋值,否则,不能赋值
    6. List<?>和List 是相等的,都代表最大范围
    ----------------------------------------------------------------------------------
    7.补充:List既是点也是范围,当表示范围时,表示最大范围

    展开全文
  • 定义如下一个简单的范型类,   package com.tom.lang.generics; public class Generics&lt;T&gt; { private T value; public Generics(T value) { this.value = value; } }     @...

     

     

    定义如下一个简单的范型类,

     

    package com.tom.lang.generics;
    
    public class Generics<T> {
        private T value;
        public Generics(T  value) {
            this.value = value;
        }
    }

     

      

        @Test
        public void test() {
            Generics<Integer> v1 = new Generics<Integer>(10);
            Generics<Long> v2 = new Generics<Long>(10L);
            Generics<Object> v3 = new Generics<Object>(new Object());
    
             v1  = v2; //编译错
             v2 = v1; //编译错
             v3 = v1; //编译错
        }

     

    在Java范型一中给已经说到了,上面的三种类型是不兼容的,即v1,v2,v3赋值语句都有编译错。这个例子代码表明,确定范型类的类型,一方面包括范型类本身,另一方面包括类型参数。范型类型只有类型和类型参数相同,才能认为类型是兼容的。

     

    范型通配符

     范型类的类型参数不同导致的类型的变量不能有存放到范型集合中,使用<?>可以通配类型参数,

     

     

            Generics<?>[] array = new Generics[3];
            Generics<Integer> v1 = new Generics<Integer>(10);
            Generics<Long> v2 = new Generics<Long>(10L);
            Generics<Object> v3 = new Generics<Object>(new Object());
            array[0] = v1;
            array[1] = v2;
            array[2] = v3;

     

    限制类型的范型通配符

      使用<? extends  SuperClass>定义限制类型的范型通配符,例如

            Generics<? extends Number>[] array = new Generics[3];
            Generics<Integer> v1 = new Generics<Integer>(10);
            Generics<Long> v2 = new Generics<Long>(10L);
            Generics<Object> v3 = new Generics<Object>(new Object());
            array[0] = v1;
            array[1] = v2;
            array[2] = v3; //编译错

     

     

     使用下面的限制类型的范型通配符,会有编译错,这是为什么?也就是说,通配符不能出现在范型类的范型参数列表中?

     

    public class Generics<? extends Number> {
    
    }

     

     使用<? super ChildType>

     

            Generics2<? super java.sql.Date>[] array = new Generics2[3];
            Generics2<java.util.Date> v3 = new Generics2<java.util.Date>(new java.util.Date());
            array[0] = v3;

     

    上例中,数组中的每个元素的类型参数的类型都是java.sql.Date的父类

     

     

    泛型通配符的应用场景

     带有泛型通配符的泛型类,由于通配符只有在运行时才能确定其真正的类型,因此,泛型通配符在上使用上有一定的限制,

     

     1. 如下的定义会有编译错,原因是?是任意类型,在类中无法使用

     

    public class Generics<? extends Number> {
    
    }

     

     只能像如下的定义,T这个类型参数在编译时虽然没有确定,但是编译时可以知道这个类型是继承自Number的,因此Number可用的方法,对于T来说也可以使用

    public class Generics<T extends Number> {
    
    }

     

     2. 泛型通配符可以用于一致的赋值,例如

     

            Generics<? extends Number>[] array = new Generics[3];
            Generics<Integer> v1 = new Generics<Integer>(10);
            Generics<Long> v2 = new Generics<Long>(10L);
            Generics<Object> v3 = new Generics<Object>(new Object());
            array[0] = v1;

     

     3.又如下面的定义,这个变量定义,可以将泛型类型赋值给var,达到一种Javascript弱类型的效果

     

    public class Generics <T> {
        public static void main(String[] args) {
            Generics<?> var = null;
            var = new Generics<String>();
            var = new Generics<Date>();
        }
    }
     

     

     

     

     

     

    展开全文
  • : 上界通配符, ?表示继承自T的类(沿着类图,上边界是T)。频繁往外读取内容,适合采用上界通配符。 2 <? super T>:下界通配符,?表示T及其父类(沿着类图,下边界是T)。频繁插入内容,适合采用下界通配符。 ...
  • 范型

    2021-03-26 15:12:06
    目录概念实现范型通配符上下限 概念 是指在类定义时不指定类中信息的具体数据类型,⽽是暂时⽤⼀个标识符来替代,当外部实例化对象的时候再来指定具体的数据类型。这种方式大大提高了程序的灵活性,类的扩展性。 ...
  • 理解范型中的通配符'?' [java] view plaincopy class A {   public void fun() {   System.out.println("A");   }  }    class B extends A {   @Overr
  • 范型范型使用

    2021-07-20 08:24:00
    范型通配符 1. 无边界通配符:? public void print(List<?> list){ for(int i=0;i<list.size();i++){ system.out.print(list.get(i)); } } 2.上边界通配符:?extends Number 通用的类型必须是Number...
  • JAVA范型指南中文版

    2008-07-27 10:42:41
    JAVA范型指南:讲述范型,范型通配符,范型方法,范型与久代码(无范型)的融合,范型的擦除与翻译等...
  • java-范型

    2021-03-04 14:16:45
    范型通配符 继承范型类和实现范型接口 泛型集合 public class Test14 { public static void main(String[] args) { // 创建3个Book对象 Book book1 = new Book(1, "唐诗三百首", 8); Book book2 = new Book(2, ...
  • 文章目录来源0、范型的好处1、范型通配符1.1 JAVA泛型通配符? T K V E1.2 ?和T区别1.3 方法中为什么需要 T 修饰呢1.4 通配符只是个约定的大写字母1.5 同时使用多个范型参数,如K,V2、普通的非泛型类 Class2.1 Class...
  • 一、通配符 ?标识的范型化对象,可以标识任意类型的范型化 ,可以将...通配符范型化的类型 。  Collection c=new ArrayList() ;  c.add(1) ;  c.add(5); //jdk1.5的自动装箱子=功能   showCollection(c) ;
  • 2.1extends通配符的第一种用法 如果想要add接收Pair.Integer、Pair.Float、Pair.Double,将Pair类型修改为使方法接收所有泛类型为Number或Number子类的Pair类。 package com.testArray; public class ...
  • 一、通配符 ?标识的范型化对象,可以标识任意类型的范型化 ,可以将任意类型化的值...通配符范型化的类型 。 Collection<Integer> c=new ArrayList() ; c.add(1) ; c.add(5); //jdk1.5的自动装箱子=功能 ...
  • java 范型详解

    千次阅读 2017-04-29 14:05:46
    1.范型长啥样?ArrayList<String> list = new ArrayList ();这是我们最常见的了,然而对于很多java开发来说,只知道用java本身自带的一些范型类,而对于自己去创建范型类啥的,不太熟悉。 范型在java当中是一个比较...
  • Java范型类 public class FanXingClassTest { public static void main(String args[]){ Test<Integer> intObj = new Test<Integer>(123); Test<String> strObj = ne...
  • 笔记-范型

    2020-11-24 10:22:40
    一. 范型:参数化类型 二. 使用范型好处: 1. 适用于多种数据类型执行相同代码 2. 提高java程序类型安全 ... 范型方法是独立的,不依赖于类/接口,在范型方法中可以使用通配符(?代表通配符) 声明范型:&l...
  • Java范型

    2021-03-30 16:40:16
    范型 Generics 让数据类型变得参数化 定义范型时,对应的数据类型是不确定的 范型方法被调用时,会指定具体类型 核心目标,解决容器类型在编译时安全检查的问题 public class GenericDemo { public static void ...
  • 本文详细介绍Java的范型,写一篇关于范型的博客原因有两个,前几天要写个范型方法(返回值根据传入的类型而定),竟然想了半天,最后还是从网上找了个范型方法的写法;再者,前一段时间在看Gson, Gson这个JSON包的精华...
  • JAVA范型

    2020-08-19 16:37:44
    不使用范型带来的危害:当我们将一个对象放入集合中,集合不会记住此对象的类型,当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但其运行时类型任然为其本身类型。取出集合元素时需要人为的强制...
  • Java范型那些事(二)

    2018-09-05 21:15:46
    《Java范型那些事(一)》 参考oracle官网对于范型的介绍 :https://docs.oracle.com/javase/tutorial/extra/generics/legacy.html 目录 9. 使用通配符?的更多乐趣 通配符捕获 10. 使用范型改写旧代码(未使用...
  • java范型

    2017-03-06 21:20:22
    Java泛型由来的动机 理解Java泛型最简单的方法是把它看成一种便捷语法,能节省...范型类、范型接口 public interface List<T> extends Collection<T> { //get方法实际返回的是一个类型为T的对象,T是在List声明中的类

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,609
精华内容 643
关键字:

范型通配符