美文网首页
Java编程思想之范型(1)

Java编程思想之范型(1)

作者: 码头军 | 来源:发表于2018-08-22 11:49 被阅读0次

Java范型是在Java5.0(1.5)版本中提出的,虽然Oracle已经发布了Java 1.9,Java 12的feature也已经在讨论中,但对于很多程序员来讲,对范型的理解和运用并不好,接下来的系列文章带大家一起深入理解Java范型。该系列问题第一篇先请感兴趣的同学看一些范型相关的问题,答案随后给出。

  1. 定义两个List:
List<Number> numbers = newArrayList<Number>();
List<Integer> integers = new ArrayList<>();

有个方法:

public static void printItem(List<Number>list) {
      for (Numbernumber : list) {
           System.out.println(number+ "");
      }
}

问:printItem(numbers)和printItem(integers)是否有问题?

  1. 声明一个List<Object> objectList =new ArrayList<>();以下选项哪些是正确的?
1) list.add(2L);

2) list.add(1);

3) list.add(1.0);

4) list.add(null);

5) list.add(new Object());
  1. 声明一个list,List<?>list = new ArrayList<>();以下语句哪些是对的?
1) list.add("a");

2) list.add(1);

3) list.add(new Object())

4) list.add(null);
  1. 针对上一问题,如果把list改为List<Object>list = new ArrayList<>();4个选项哪些是正确的?

  2. 声明一个List<? extends Number>extendsNumberList = new ArrayList<>();以下选项哪些是正确的?

1) list.add(2L);

2) list.add(1);

3) list.add(null);
  1. 声明一个List<? super Number> superNumberList= new ArrayList<>();以下选项哪些是正确的?
1) list.add(2L);

2) list.add(1);

3) list.add(1.0);

4) list.add(null);

5) list.add(newObject());
  1. 通过上述两题,请说出在范型中extends和super关键字的用法,可以通过一个具体的类来说明,例如List<?extendsNumber> vs List<? super Number>

  2. 声明一个List<Integer> intList = newArrayList,以下代码片段编译、执行都正常吗:

if(intList instanceof List){
    System.out.println("List<Integer> is list");
}
  1. 声明一个List<Integer> intList = newArrayList,代码片段编译、执行都正常吗:
if(intListinstanceof List<Integer>){
    System.out.println("List<Integer> is list");
}
  1. Java引入范型(Generics)的目的有哪些?

  2. 以下代码片段编译、运行是否有问题?

public class GenericTest{
    interface Int{
        void m1();
    }
    static class Clz{
        void m2(){
            System.out.println("in Clz m2");
        };
    }
    static class Gclz<T extends Clz & Int >{
        void printClz(T t){
            System.out.println("T:" + t.getClass().getName());
            System.out.println("T:" + t.getClass().getSimpleName());
            t.m1();
            t.m2();
        }
    }
    static class AnyClz extends Clz implements Int{
        @Override
        public void m1() {
            System.out.println("in AnyClz m1");
        }
    }
    public static void main(String ... args){
        AnyClz anyClz = new AnyClz();
        Gclz<AnyClz> gclz = new Gclz<>();
        gclz.printClz(anyClz);
    }
}
  1. 如下两个方法签名能否定义在同一个类中,为什么?
public static void printList(List<?> list){...}
public static void printList(List<Object> list){...}
  1. 定义一个List<Integer>list = Arrays.asList(5,6),调用上题中定义的两个方法打印list元素,是否有问题?

加入公众号获取上述问题答案:

公众号二维码1.jpg

加入“Java编程思想读书会”微信群,和大量技术专家们讨论技术:

Java编程思想读书会群二维码.jpg

相关文章

  • Java编程思想之范型(1)

    Java范型是在Java5.0(1.5)版本中提出的,虽然Oracle已经发布了Java 1.9,Java 12的...

  • Java编程思想—泛型(1)

    Java编程思想---泛型(1) 泛型 简单使用 三个Holder进行对比,引出类型参数的概念 元组类库 前面的例...

  • python 函数 map 、lambda

    开篇就要提到一个大的话题:编程范型。什么是编程范型?引用维基百科中的解释: 编程范型或编程范式(英语:Progra...

  • Java 中的泛型

    1、泛型的概述: 1.1 泛型的由来 根据《Java编程思想》中的描述,泛型出现的动机:有很多原因促成了泛型的出现...

  • java中泛型(上)

    本文参考了java核心卷1中泛型程序设计该章节和java编程思想第15章。 泛型即适用于许多许多的类型。泛型最初的...

  • CoreJava笔记 - 范型程序设计(2)

    范型代码和Java虚拟机 关键知识:类型擦除Java的范型是编译器层次的范型,而在Java虚拟机上并没有范型类。在...

  • 主要的编程范型

    “主要的编程范型”及其语言特性关系 “主要的编程范型”(The principal programming par...

  • 2018-10-16

    Java编程思想 1~12 java多线程编程核心技术 23~57

  • Java编程思想---泛型(2)

    Java编程思想---泛型(2) 类型擦除 先上例子: ArrayList< String >与ArrayList...

  • scala 编程快速入门

    Scala编程思想 作者布鲁斯 埃克尔(Bruce Eckel),也是Java编程思想的作者,本书是入门读本,和之...

网友评论

      本文标题:Java编程思想之范型(1)

      本文链接:https://www.haomeiwen.com/subject/tqpeiftx.html