zoukankan      html  css  js  c++  java
  • Java泛型(1)泛型基本概念 通配符? 上限extends 下限super

    泛型方法

    • 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的
    • 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
    • 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。

    如何使用泛型方法打印不同类型的元素

    public class GenericMethod {
        // 泛型方法 print
        public static <E> void printArray(E input) {
            // 输出泛型元素
            System.out.printf("%s ", input);
        }
    
        public static void main(String args[]) {
            // 不同类型: Integer, Double 和 Character
            Integer intE = 1;
            Character charE = 'A';
    
            System.out.println("整型元素为:");
            printArray(intE); // 传递一个整型
    
            System.out.println("
    字符型元素为:");
            printArray(charE); // 传递一个字符型元素
        }
    }
    
    

    泛型类

    • 普通类的声明:
    class NormalClass{
    .....
    }
    
    • 在类名后面添加了类型参数声明部分
    class GenericClass<E>{
        private E ele;
        public E set(E e){
            this.ele=e;
        }
    }
    

    泛型通配符?

    类型通配符一般是使用?代替具体的类型参数。例如 List<?> 在逻辑上是List,List.... 等所有List<具体类型实参>的父类。

    有界的泛型类型

    类型通配符上限extends

    class clazz {
        //定义一个泛型方法
        public static <T extends Number> T extendsMethod(T x,T y){
            y=x;
            return y;
        }
        
        //测试泛型方法
        public static void testExtendsMethod(){
            Integer x=0;
            Double y=1.0;
            System.out.println(extendsMethod(x,y));
            
            String str1="a";
            Integer integer=1;
            System.out.println(extendsMethod(str1,integer));//报错
        }
    }
    

    extends 表示泛型T应该是Number的子类(Integer、Short、Long、Float、Double),也就是规定了T的上界

    类型通配符下限super

    如果把上述方法testExtendsMethod中的extends改成super,会报错Unexpected token,暂时没有找到原因

    TOTO
    

    下面是可以用的:
    类型通配符下限通过形如 List<? super Number>来定义,表示类型只能接受Number及其三层父类类型,如 Object 类型的实例。

  • 相关阅读:
    机器学习三--分类--邻近取样(Nearest Neighbor)
    机器学习二——分类算法--决策树DecisionTree
    机器学习一--基本概念
    python学习--常用正则表达式整理
    python学习--字符编码问题
    python学习--字符串处理相关方法
    python学习--如何在一个for循环中迭代多个可迭代对象(串行,并行)
    python学习--如何对迭代器进行切片操作
    List对象去重
    List 简单升降序实现
  • 原文地址:https://www.cnblogs.com/JohnTeslaaa/p/12706615.html
Copyright © 2011-2022 走看看