• 【09-03】java泛型学习笔记


    静态方法的泛型

        /**
         * @description 静态方法的泛型无法使用类定义的泛型,因为类在实例化时才确定具体的泛型类,因此静态方法要使用泛型需要使用泛型方法的方式
         */
        public class GenericityTest {
        	/**
        	 * 泛型方法
        	 */
        	public static <T> T getType(T t) {
        		System.out.println(t.getClass().getName());
        		return t;
        	}
        }
    

    泛型接口

        interface Super<T>{
        	void show(T t);
        }
        
        class Sub<T> implements Super<T>{
        
        	@Override
        	public void show(Object t) {
        	}
        	
        }
    
    

    泛型限定

    1.使用?

        /**
         * @description 测试泛型限定?
         */
        public class Test {
        	/**
        	 * 泛型限定 --> ? 未知类型
        	 */
        	public static void printCollection(Collection<?> coll) {
        		Iterator<?> it = coll.iterator();
        		while (it.hasNext()) {
        			System.out.println(it.next());
        		}
        	}
        
        	public static void main(String[] args) {
        		/**
        		 * 测试泛型限定 ?
        		 */
        		ArrayList<String> list = new ArrayList<String>();
        		for (int i = 0; i < 10; ++i) {
        			list.add(i + "");
        		}
        		printCollection(list);
        	}
        }
    

    2.使用? extends E

        /**
         * @description 测试泛型限定<? extends E>
         */
        public class Test {
        	public static void main(String[] args) {
        		/**
        		 * 测试泛型限定 extends
        		 */
        		ArrayList<Programmer<String>> programmers = new ArrayList<Programmer<String>>();
        		for (int i = 0; i < 10; ++i) {
        			programmers.add(new Programmer<String>(i + ""));
        		}
        		printExtendsCollection(programmers);
        
        	}
        
        	/**
        	 * 泛型限定 --> ? extends Object 上限限定,未知类型为Object的子类型
        	 */
        	public static <T> void printExtendsCollection(Collection<? extends Super<T>> coll) {
        		Iterator<? extends Super<T>> it = coll.iterator();
        		while (it.hasNext()) {
        			Super<T> t = it.next();
        			t.show();
        		}
        	}
        }
        
        interface Super<T> {
        	void show();
        }
        
        class Programmer<T> implements Super<T> {
        	private T name;
        
        	Programmer(T name) {
        		this.name = name;
        	}
        
        	public T getName() {
        		return name;
        	}
        
        	@Override
        	public void show() {
        		System.out.println(name);
        	}
        
        }
    

    3.使用? super E

        /**
         * @description 测试泛型限定<? super E>
         */
        public class SuperETest {
        	public static void main(String[] args) {
        		/**
        		 * treeSet构造函数原型 <? super E> 说的是比较器可以为E类型的父类型
        		 */
        		/*
        		 public TreeSet(Comparator<? super E> comparator) { 
        		 	this(new TreeMap<>(comparator));
        		 }
        		 */
        		SuperETest test = new SuperETest();
        		Set<Programmer> programmers = new TreeSet<Programmer>(test.new Comp());
        		for (int i = 0; i < 10; ++i) {
        			programmers.add(test.new Programmer(10 - i + ""));
        		}
        		for (Programmer teacher : programmers) {
        			System.out.println(teacher.getName());
        		}
        
        	}
        
        	class Person {
        		private String name;
        
        		Person(String name) {
        			this.name = name;
        		}
        
        		public String getName() {
        			return name;
        		}
        	}
        
        	class Programmer extends Person {
        		Programmer(String name) {
        			super(name);
        		}
        
        	}
        
        	class Comp implements Comparator<Person> {
        
        		@Override
        		public int compare(Person o1, Person o2) {
        			return o1.getName().compareTo(o2.getName());
        		}
        
        	}
        }
    
  • 相关阅读:
    Jmeter——关联与正则
    Jmeter图形插件扩展
    Jmeter——检查点
    Jmeter——集合点
    OpenGL帧缓存对象(FBO:Frame Buffer Object)(转载)
    unicode 和 utf8
    管理node的版本
    pyqt5 开发环境
    cmake
    一些可能常用的工具函数
  • 原文地址:https://www.cnblogs.com/achievec/p/5838227.html
Copyright © 2020-2023  润新知