• 20190920 On Java8 第二十章 泛型


    第二十章 泛型

    多态的泛化机制:

    1. 将方法的参数类型设为基类;
    2. 方法以接口而不是类作为参数;
    3. 使用泛型;

    泛型实现了参数化类型

    简单泛型

    Java 泛型的核心概念:你只需告诉编译器要使用什么类型,剩下的细节交给它来处理。

    钻石写法:

    GenericHolder<Bob> h3 = new GenericHolder<>();
    

    一个元组类库

    元组,是将一组对象直接打包存储于其中的一个单一对象。

    一个堆栈类

    public class LinkedStack<T> {
    	private static class Node<U> {
    		U item;
    		Node<U> next;
    
    		Node() {
    			item = null;
    			next = null;
    		}
    
    		Node(U item, Node<U> next) {
    			this.item = item;
    			this.next = next;
    		}
    
    		boolean end() {
    			return item == null && next == null;
    		}
    	}
    
    	private Node<T> top = new Node<>(); // End sentinel
    
    	public void push(T item) {
    		top = new Node<>(item, top);
    	}
    
    	public T pop() {
    		T result = top.item;
    		if (!top.end())
    			top = top.next;
    		return result;
    	}
    
    	public static void main(String[] args) {
    		LinkedStack<String> lss = new LinkedStack<>();
    		for (String s : "Phasers on stun!".split(" "))
    			lss.push(s);
    		String s;
    		while ((s = lss.pop()) != null)
    			System.out.println(s);
    	}
    }
    

    RandomList

    public class RandomList<T> extends ArrayList<T> {
    	private Random rand = new Random(47);
    
    	public T select() {
    		return get(rand.nextInt(size()));
    	}
    
    	public static void main(String[] args) {
    		RandomList<String> rs = new RandomList<>();
    		Arrays.stream(("The quick brown fox jumped over " + "the lazy brown dog").split(" ")).forEach(rs::add);
    		IntStream.range(0, 11).forEach(i -> System.out.print(rs.select() + " "));
    	}
    }
    

    泛型接口

    Java 泛型的一个局限性:基本类型无法作为类型参数。

    泛型方法

    复杂模型构建

    泛型擦除

    补偿擦除

    边界

    通配符

    问题

    自我约束类型

    动态类型安全

    泛型异常

    混入

    潜在类型

    补偿不足

    辅助潜在类型

    泛型的优劣

  • 相关阅读:
    OpenCV:Python3使用OpenCV
    CNN结构:MXNet设计和实现简介
    环的寻找:寻找无向图中所有存在的环-删除点法
    JAVA 构建使用 Native 库
    Android:JAVA使用HDF5存储
    Java:数值-字符串转换(String转Double)
    Qt无法用UTF-8编辑问题
    Boost-QT兼容问题:#define FUSION_HASH #
    JAVA;使用java.awt.Image的不稳定性
    图方法:寻找无向图联通子集的JAVA版本
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/11560235.html
Copyright © 2020-2023  润新知