一个无用工具类

简介: 一个无用工具类

富贵不能淫;贫贱不能移;威武不能屈;此之谓大丈夫。——《孟子·滕文公下》

前两天看了点mybatis-plus源码,又看了点手工耿的视频,就有感而发,写下这个工具类

介绍:

平时我们返回给前端返回值就像这样

我们每次都要写这个魔法值key

这样一两个都还好,但久而久之可能会写错

如果我们如果遇到比较长的字段名,可能就要写很长很长,并且没有编译器的提示

所以我照着mybatis-plus源码,顺便用了它一点方法,写了下面这个工具类

这个工具类里就一个方法和一个接口,以及一个测试的主函数,可以通过Lambda表达式获取到它的属性名

package com.ruben.utils;/**
 * @ClassName: FunctionUtils
 * @Date: 2020/11/9 0009 23:43
 * @Description:
 */
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
import com.ruben.pojo.User;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
/**
 * @ClassName: FunctionUtils
 * @Description: 我还没有写描述
 * @Date: 2020/11/9 0009 23:43
 * *
 * @author: <achao1441470436@gmail.com>
 * @version: 1.0
 * @since: JDK 1.8
 */
public class FunctionUtils {
    @FunctionalInterface
    public interface IFunction<T, R> extends Serializable {
        R apply(T t);
    }
    public static String getAttributeName(IFunction func) {
        if (!func.getClass().isSynthetic()) {
            throw ExceptionUtils.mpe("该方法仅能传入 lambda 表达式产生的合成类");
        }
        SerializedLambda lambda;
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(func);
            oos.flush();
            ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())) {
                @Override
                protected Class<?> resolveClass(ObjectStreamClass objectStreamClass) throws IOException, ClassNotFoundException {
                    Class<?> clazz = super.resolveClass(objectStreamClass);
                    return clazz == java.lang.invoke.SerializedLambda.class ? SerializedLambda.class : clazz;
                }
            };
            lambda = (SerializedLambda) objIn.readObject();
        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException("这不可能发生!", e);
        }
        String methodName = lambda.getImplMethodName();
        return methodName.substring(3, 4).toLowerCase() + methodName.substring(4);
    }
    public static void main(String[] args) {
        User user = new User();
        Map<String, Object> map = new HashMap<>(1 << 4);
        IFunction<User, String> getUsername = User::getUsername;
        map.put(FunctionUtils.getAttributeName(getUsername), user.getUsername());
    }
}

之后我们就可以使用这种方式去获取属性名,再也不怕写错了

怎么样,是不是很没用?!

相关文章
|
27天前
|
存储 Java
Java扫描某个文件夹且要保证不重复扫描,如何实现?
【10月更文挑战第18天】Java扫描某个文件夹且要保证不重复扫描,如何实现?
51 3
|
设计模式 Java
Java克隆方式避免频繁创建对象优化方案
Java克隆方式避免频繁创建对象优化方案
110 0
|
4月前
|
算法 Java
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
58 1
|
4月前
|
设计模式 Java API
如何处理Java中的方法过长?
如何处理Java中的方法过长?
|
4月前
|
存储 缓存 算法
Java面试题:给出代码优化的常见策略,如减少对象创建、使用缓存等。
Java面试题:给出代码优化的常见策略,如减少对象创建、使用缓存等。
61 0
|
5月前
|
安全 Java
Java 对象创建与使用:你真的会用吗?
【6月更文挑战第15天】在Java中,对象创建涉及`new`关键字和构造器,用于初始化。使用对象时注重属性和方法的访问,遵循命名规范。关注对象生命周期,避免过度创建,如在循环内,以减少内存消耗和提高性能。还要考虑线程安全,尤其在多线程环境下,确保正确同步以防止数据不一致。通过优化对象的创建与使用,提升代码效率和可靠性。
46 0
|
6月前
|
Java
Java【代码 14】一个用于判断磁盘空间和分区表是否需要清理的工具类
Java【代码 14】一个用于判断磁盘空间和分区表是否需要清理的工具类
52 0
|
消息中间件 JavaScript 小程序
Java批量更新太慢?多线程+List分段完美解决!
Java批量更新太慢?多线程+List分段完美解决!
|
Java Android开发
JAVA无用代码检查工具:UCDelete
JAVA无用代码检查工具:UCDelete
237 0
JAVA无用代码检查工具:UCDelete
|
存储 算法 Java
JDK9之前java对象进入老年代的所有方式
JDK9之前,虚拟机HotSpot的堆被划分为新生代和老年代,新生代中的对象年龄超过15,该对象就会被移入老年代,这种方式也是最常见的一种对象进入老年代的方式,但是对象进入老年代却不止这一种方式,下面总计下对象进入老年代的几种方式
184 0