随笔 - 607,  文章 - 173,  评论 - 2,  阅读 - 21万
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   菜鸟乙  阅读(144)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示