一个无用工具类

简介: 一个无用工具类

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

前两天看了点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());
    }
}

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

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

相关文章
|
存储 NoSQL BI
Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
334 0
|
11月前
|
SQL 监控 关系型数据库
用友畅捷通在Flink上构建实时数仓、挑战与最佳实践
本文整理自用友畅捷通数据架构师王龙强在FFA2024上的分享,介绍了公司在Flink上构建实时数仓的经验。内容涵盖业务背景、数仓建设、当前挑战、最佳实践和未来展望。随着数据量增长,公司面临数据库性能瓶颈及实时数据处理需求,通过引入Flink技术逐步解决了数据同步、链路稳定性和表结构差异等问题,并计划在未来进一步优化链路稳定性、探索湖仓一体架构以及结合AI技术推进数据资源高效利用。
803 25
用友畅捷通在Flink上构建实时数仓、挑战与最佳实践
|
10月前
|
计算机视觉
YOLOv11改进策略【Neck】| PRCV 2023,SBA(Selective Boundary Aggregation):特征融合模块,描绘物体轮廓重新校准物体位置,解决边界模糊问题
YOLOv11改进策略【Neck】| PRCV 2023,SBA(Selective Boundary Aggregation):特征融合模块,描绘物体轮廓重新校准物体位置,解决边界模糊问题
444 11
|
算法 数据可视化 数据挖掘
C# | DBSCAN聚类算法实现 —— 对直角坐标系中临近点的点进行聚类
聚类算法是一种常见的数据分析技术,用于将相似的数据对象归类到同一组或簇中。其中,DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,能够有效地识别出不同形状和大小的簇,同时还能标识出噪声数据。本篇博客将介绍聚类算法的概念、DBSCAN算法的原理,并通过提供的C#代码逐步解析DBSCAN算法的实现过程。
953 0
C# | DBSCAN聚类算法实现 —— 对直角坐标系中临近点的点进行聚类
|
网络协议 大数据 网络架构
【TCP】确认应答、超时重传机制和TCP报头
【TCP】确认应答、超时重传机制和TCP报头
368 3
|
文字识别 Ubuntu 数据安全/隐私保护
狂揽16.9k star!Umi-OCR文字识别太火了,解决了多少人的痛点!
狂揽16.9k star!Umi-OCR文字识别太火了,解决了多少人的痛点!
511 2
|
安全 编译器 API
为什么会有 GIL?如何释放 GIL 实现并行?
为什么会有 GIL?如何释放 GIL 实现并行?
294 1
|
运维 Java Linux
(九)JVM成神路之性能调优、GC调试、各内存区、Linux参数大全及实用小技巧
本章节主要用于补齐之前GC篇章以及JVM运行时数据区的一些JVM参数,更多的作用也可以看作是JVM的参数列表大全。对于开发者而言,能够控制JVM的部分也就只有启动参数了,同时,对于JVM的性能调优而言,JVM的参数也是基础。
332 8
在Modbus RTU中同时进行读取和写入操作
在Modbus RTU中同时进行读取和写入操作
424 0
|
存储 Java Go
Go从入门到放弃之结构体(面向对象)
Go从入门到放弃之结构体(面向对象)

热门文章

最新文章