1    泛型demo
1.1    泛型____类demo

泛型主类:

package com.ddwei.fanxing;

public class Pair<T> {
    private T first;
    private T second;
    public T getFirst() {
        return first;
    }
    public void setFirst(T first) {
        this.first = first;
    }
    public T getSecond() {
        return second;
    }
    public void setSecond(T second) {
        this.second = second;
    }

    public Pair() {
        first = null;
        second = null;
    }
    public Pair(T first, T second) {
        this.first = first;
        this.second = second;
    }

}

 

 

String处理类:

package com.ddwei.fanxing;

public class ArrayAlg {
    
    public static Pair<String> minmax(String[] a){
        if(a==null || a.length == 0) return null; 
        String min = a[0];
        String max = a[0];
        for(int i = 1; i < a.length; i++){
            if(min.compareTo(a[i]) > 0) min = a[i];
            if(max.compareTo(a[i]) < 0) max = a[i];
        }
        
        
        return new Pair(min,max);
        
    }

}

 

int处理类:

package com.ddwei.fanxing;

public class ArrayAlg2 {
    
    public static Pair<Integer> minmax(int[] a){
        if(a==null || a.length == 0) return null; 
        Integer min = a[0];
        Integer max = a[0];
        for(int i = 1; i < a.length; i++){
            if(min.compareTo(a[i]) > 0) min = a[i];
            if(max.compareTo(a[i]) < 0) max = a[i];
        }
        
        return new Pair(min,max);
        
    }

}

 

测试类:

package com.ddwei.fanxing;

public class PairTest1 {
    
    public static void main(String[] args) {
        String [] words = {"Mary", "had", "A", "little", "lamp"    };
        Pair<String> mm = ArrayAlg.minmax(words);
        System.out.println("min = "+ mm.getFirst());
        System.out.println("max = "+ mm.getSecond());
        
        int [] number = {5, 9, 1, 7, 2};
        Pair<Integer> mm2 = ArrayAlg2.minmax(number);
        System.out.println("min = "+ mm2.getFirst());
        System.out.println("max = "+ mm2.getSecond());
    }
    

}

 

1.2    泛型____方法demo

功能:取出中间元素

package com.ddwei.fanxing2;


public class ArrayAlg {
    
    //...代表多个传参数
    public static <T>T getMiddle(T... a){
        return a[a.length/2];
    }
    
    public static void main(String[] args) {
        //String middle = ArrayAlg.getMiddle("aaa","ccc","bbb","dddd");
        System.out.println(ArrayAlg.getMiddle("Hello", null, 4)); 
        //System.out.println(middle);
        
    }
    
    

}

 

 

1.3    泛型____类型变量限定demo

功能:compareto会有编译错误,为了避免这种情况,需要限定T实现Comparable接口

package com.ddwei.fanxing3;


public class ArrayAlg {
    
    public static <T extends Comparable>T min (T[] t){
        if(t == null || t.length ==0){
            return null;
        }
        T min = t[0];
        for(int i = 1;i < t.length;i++){
            if(min.compareTo(t[i]) > 0){
                min = t[i];
            }
        }
        return min;
    }
    
    public static void main(String[] args) {
        //Double[] demo = {1.9,3.9,0.4,9.9,10.0};
        //Integer[] demo = {6,8,5,74,1};
        String[] demo = {"33","qwe","qw1","dfds","we"};
        System.out.println(min(demo));
    }

}

 

 

2    常用知识:
2.1    不同类型判断
        List<StudentDto> list = (o1 instanceof List) ? (List)o1 : Collections.EMPTY_LIST;
        StudentDto dto = (o1 instanceof StudentDto) ? (StudentDto) o1 : new StudentDto();
        String dto = (o1 instanceof String) ? (String) o1 : "";

详细demo参考我这篇博客:统一响应 - 菜鸟乙 - 博客园 (cnblogs.com)

 

 

N    概念简述
N.1    泛型是java哪个版本引入的

JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

 

N.2    为什么要引入泛型

在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。

对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一个安全隐患。

那么泛型的好处就是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的。

 

 

N.3    泛型通配符具体代表的含义

本质上这些个都是通配符,没啥区别,只不过是编码时的一种约定俗成的东西。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。通常情况下,T,E,K,V,?是这样约定的:

  • ?表示不确定的 java 类型

  • T (type) 表示具体的一个java类型

  • K V (key value) 分别代表java键值中的Key Value

  • E (element) 代表Element

N.4    文章参考

https://blog.csdn.net/youanyyou/article/details/100910242

posted on 2020-05-21 09:58  菜鸟乙  阅读(144)  评论(0编辑  收藏  举报