专业的JAVA编程教程与资源

网站首页 > java教程 正文

「Java工具类」返回对象的封装,非常实用

temp10 2024-11-13 12:41:43 java教程 11 ℃ 0 评论

介绍语

本头条号主要是Java常用关键技术点,通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技术分享;datax、kafka、flink等大数据处理框架的技术分享。文章会不断更新,欢迎码友关注点赞收藏转发!

「Java工具类」返回对象的封装,非常实用

关注多的话,后面会录制一些视频教程,图文和视频结合,比如:图书介绍网站系统、抢购系统、大数据中台系统等。技术才是程序猿的最爱,码友们冲啊

正文

java的泛型非常重要,希望码友们多百度看多些泛型的相关文章。在各种框架中泛型的使用非常广泛和使用频率都非常高,在整个架构中起到非常重要的作用。下面直接来几个例子。

封装统一返回对象,用于项目中返回对象的外出统一包装

使用样例

 
 System.out.println(JacksonMapper.toJsonString(MyResponseEntity.success()));
 System.out.println(JacksonMapper.toJsonString(MyResponseEntity.error("发生错误")));
 System.out.println(JacksonMapper.toJsonString(MyResponseEntity.success(new Person("李四", 12, true, new Date()))));
 // {"code":20000,"msg":"","data":""}
 // {"code":-1,"msg":"发生错误","data":""}
 // {"code":20000,"msg":"","data":{"name":"李四","age":12,"sex":true,"birthday":"2019-09-05"}}
 

统一返回对象工具类

 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import java.io.Serializable;
 
 @ApiModel("响应报文体的包装")
 public class MyResponseEntity<T> implements Serializable {
 
     private static final long serialVersionUID = 1L;
     public static final int SUCCESS = 0;
     public static final int FAILURE = -1;
 
     @ApiModelProperty(required = true, value = "操作结果,成功0、失败-1")
     private int code;
     @ApiModelProperty(required = false, value = "当失败时返回的信息")
     private String msg;
     @ApiModelProperty(required = false, value = "响应的业务数据")
     private T data;
 
     public int getCode() {
         return code;
     }
 
     public void setCode(int code) {
         this.code = code;
     }
 
     public String getMsg() {
         return msg;
     }
 
     public void setMsg(String msg) {
         this.msg = msg;
     }
 
     public T getData() {
         return data;
     }
 
     public void setData(T data) {
         this.data = data;
     }
 
     public static <T> MyResponseEntity<T> success() {
         MyResponseEntity<T> entity = new MyResponseEntity<>();
         entity.setCode(SUCCESS);
         return entity;
     }
 
     public static <T> MyResponseEntity<T> success(T data) {
         MyResponseEntity<T> entity = success();
         entity.setData(data);
         return entity;
     }
 
     public static <T> MyResponseEntity<T> error(String message) {
         MyResponseEntity<T> entity = new MyResponseEntity<>();
         entity.setCode(FAILURE);
         entity.setMsg(message);
         return entity;
     }
 }


其它一些泛型的使用,泛型方法的使用

泛型方法1

 public class Test {
     public static void main(String[] args) {
         System.out.println(Test.str2list("a","b","d"));
         // [a, b, d]
         System.out.println(Test.str2list(1,3,1,4));
         // [1, 3, 1, 4]
     }

     // 泛型方法,注意参数
     public static <E> List<E> str2list(E... args){
         List<E> list = new ArrayList<>();
         for (int i = 0; i < args.length; i++) {
             list.add(args[i]);
         }
         return list;
     }
 }

方向方法2,注意参数

 public class Test {
     public static void main(String[] args) {
         List<Child> list = new ArrayList<>();
         Child child1 = new Child();
         child1.setName("zhangsan");
         child1.setAge(13);
         list.add(child1);
         Child child2 = new Child();
         child2.setName("李四");
         child2.setAge(20);
         list.add(child2);
 
         print(list);
         // Child(age=13)
         // Child(age=20)
 
         /*
         List<Person> list2 = new ArrayList<>();
         print(list2); // list2是放不进print方法的,因为参数限制了必须为Parent类或者Parent的子
         */
     }
 
     public static void print(List<? extends Parent> childs) {
         childs.forEach(child -> System.out.println(child.getName()));
 
     }
 }

如果把<? extends Parent>换成<? super Parent>呢?
这两种写法就是泛型的限定,限定类型的上限或下限:
? extends E 接收E类型或者E的子类型。
? super E 接收E类型或者E的父类型

好了,这个泛型的内容实在太多了,而且项目中用的非常多,一些工具类或者通用类基本都是泛型封装起来的,这里也只是介绍简单的内容,伙伴们想更加深入的了解泛型就自己百度下吧,相信度娘解释的比我清楚。(づ ̄ 3 ̄)づ

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表