博客
关于我
Java开发经验——Java开发常用工具类实战总结
阅读量:797 次
发布时间:2023-03-29

本文共 5582 字,大约阅读时间需要 18 分钟。

Java开发工具类精粹

在Java开发中,工具类是提高开发效率和代码质量的重要助力。本文将介绍几种常用的工具类及其应用场景。

1. static变量与远程配置

在Java中,static变量属于类而非实例,且在类加载时初始化,整个生命周期内保持不变。因此,static变量无法动态读取或更新远端配置。

推荐的解决方案包括:

  • 单件模式:创建一个单件类,用于加载和维护远端配置。
  • 依赖注入:使用如Spring框架管理配置加载和更新。
  • 观察者模式:实现配置变化监听机制。
  • 定期刷新:通过定时任务更新配置。

以下是一个实现示例:

public class ConfigManager {    private static ConfigManager instance;    private String remoteConfigValue;    private ConfigManager() {        fetchRemoteConfig();        startConfigRefreshTask();    }    public static synchronized ConfigManager getInstance() {        if (instance == null) {            instance = new ConfigManager();        }        return instance;    }    private void fetchRemoteConfig() {        // 从远端配置中心获取配置值        // remoteConfigValue = ...     }    private void startConfigRefreshTask() {        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);        scheduler.scheduleAtFixedRate(this::fetchRemoteConfig, 0, 1, TimeUnit.HOURS);    }    public String getRemoteConfigValue() {        return remoteConfigValue;    }}

2. toString()与JSON.toJSONString()

方法对比

方法 目的 输出格式 注意事项
childPolicyOutputList.toString() 获取对象字符串表示 格式类似JSON字符串,可能不符合标准 适用于简单展示,不需严格格式化
JSON.toJSON(childPolicyOutputList) 将对象转换为JSON对象 返回JSON对象,不是字符串 适用于需要操作JSON对象时
JSON.toJSONString(childPolicyOutputList) 将对象转换为JSON字符串 格式化的JSON字符串 适用于需要网络传输或存储时

示例

// 示例1:使用toString()Object obj = new Object();System.out.println(obj.toString()); // 输出: java.lang.Object@15f3f6e// 示例2:使用JSON转换JSONObject json = new JSONObject();json.put("name", "Alice");String jsonString = json.toJSONString();System.out.println(jsonString); // 输出: {"name":"Alice"}

3. 判断是否为空(Null或Empty)

对象判断

// Apache Commons Langimport org.apache.commons.lang3.ObjectUtils;if (ObjectUtils.isEmpty(obj)) {    // 处理为空情况}// Guavaimport com.google.common.base.Preconditions;Preconditions.checkNotNull(obj, "对象不能为空");

字符串判断

// Apache Commons Langimport org.apache.commons.lang3.StringUtils;System.out.println(StringUtils.isEmpty("")); // trueSystem.out.println(StringUtils.isBlank("   ")); // true

列表判断

import java.util.Collections;if (Collections.isNotEmpty(list)) {    // 处理非空情况}

地图判断

// Apache Commons Collectionsimport org.apache.commons.collections4.MapUtils;if (MapUtils.isEmpty(map)) {    // 处理为空情况}

4. Optional类使用

介绍

Optional类用于处理可能null的容器对象,提供了null安全的操作方法。

示例

// 创建Optional实例Optional optionalObj = Optional.ofNullable(obj);// 判断是否存在if (optionalObj.isPresent()) {    // 获取值    Object value = optionalObj.get();}// 操作optionalObj.ifPresent(systemOut::println);// 显式获取Optional
name = Optional.of("Sanaulla");if (name.isPresent()) { System.out.println(name.get());}

5. 字符工具类

Apache Commons Lang

import org.apache.commons.lang3.StringUtils;String str = "Hello World";System.out.println(StringUtils.reverse(str)); // "dlroW olleH"

Google Guava

import com.google.common.base.Strings;String str = "Guava";System.out.println(Strings.padEnd(str, 10, '!')); // "Guava!!!!!"

6. 集合类工具类

Map工具

// Apache Commons Collectionsimport org.apache.commons.collections4.MapUtils;Map
map = MapUtils.emptyMap();

List工具

// Apache Commons Collectionsimport org.apache.commons.collections4.ListUtils;List
list = ListUtils.union(list1, list2);

Set工具

// Google Guavaimport com.google.common.collect.Sets;Set
set = Sets.newHashSet(list);

7. JSON对象工具类

Jackson

// 将Java对象转换为JSON字符串ObjectMapper mapper = new ObjectMapper();Person person = new Person("John", 30);String jsonString = mapper.writeValueAsString(person);// 将JSON字符串转换为Java对象Person deserializedPerson = mapper.readValue(jsonString, Person.class);

Gson

// 将Java对象转换为JSON字符串Gson gson = new Gson();String jsonString = gson.toJson(person);// 将JSON字符串转换为Java对象Person deserializedPerson = gson.fromJson(jsonString, Person.class);

8. JDK流式函数

创建流

// 从集合创建流List
list = Arrays.asList("apple", "banana", "orange");Stream
streamFromList = list.stream();// 从数组创建流String[] array = {"apple", "banana", "orange"};Stream
streamFromArray = Arrays.stream(array);

Stream操作

// 过滤List
numbers = Arrays.asList(1, 2, 3, 4, 5);Stream
filteredStream = numbers.stream().filter(x -> x > 2);// 映射Stream
wordLengths = words.stream().map(String::length);// flattedListList
flatList = numbers.stream().flatMap(Collection::stream);

终端操作

// forEachwords.stream().forEach(System.out::println);// toArrayString[] wordArray = words.stream().toArray(String[]::new);// reduceOptional
sum = numbers.stream().reduce(Integer::sum);

9. Money工具类

定制Money类

public class Money {    private BigDecimal amount;    private CurrencyUnit unit;    public Money(BigDecimal amount, CurrencyUnit unit) {        this.amount = amount;        this.unit = unit;    }    public BigDecimal getAmount() {        return amount;    }    public CurrencyUnit getUnit() {        return unit;    }    public Money add(Money other) {        if (!getUnit().equals(other.getUnit())) {            throw new IllegalArgumentException("单位不一致");        }        return new Money(getAmount().add(other.getAmount()), getUnit());    }}

应用示例

Money money = new Money(new BigDecimal("1000.00"), EUR);money.add(new Money(new BigDecimal("500.00"), EUR); // 结果为1500.00 EUR

10. 断言工具类

自定义断言

public class AssertUtil {    public static void isNotNull(Object input, String fieldName) {        if (input == null) {            throw new BusException("字段" + fieldName + "不能为空");        }    }    public static void equals(Object str1, Object str2, String err) {        if (!str1.equals(str2)) {            throw new BusException(err);        }    }}

转载地址:http://umhfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现找出矩阵的最大最小值(附完整源码)
查看>>
Objective-C实现找到一个数字数组的中值算法(附完整源码)
查看>>
Objective-C实现找到具有 500 个除数的第一个三角形数算法(附完整源码)
查看>>
Objective-C实现找到最近的点对之间的距离算法(附完整源码)
查看>>
Objective-C实现抓包实例(附完整源码)
查看>>
Objective-C实现抽签抓阄(附完整源码)
查看>>
Objective-C实现抽象工厂模式(附完整源码)
查看>>
Objective-C实现拉格朗日插值法(附完整源码)
查看>>
Objective-C实现拉格朗日插值算法(附完整源码)
查看>>
Objective-C实现拓扑排序算法(附完整源码)
查看>>
Objective-C实现拷贝二进制文件(附完整源码)
查看>>
Objective-C实现指定内存空间获取时间的函数(附完整源码)
查看>>
Objective-C实现指定点 x 处计算多项式 f(x) 并返回值算法(附完整源码)
查看>>
Objective-C实现按位倒序(附完整源码)
查看>>
Objective-C实现按位运算符乘以无符号数multiplyUnsigned算法(附完整源码)
查看>>
Objective-C实现排队叫号系统(附完整源码)
查看>>
Objective-C实现控制NRP8S功率计读取功率 (附完整源码)
查看>>
Objective-C实现控制程控电源2306读取电流 (附完整源码)
查看>>
Objective-C实现摄氏温度和华氏温度互转(附完整源码)
查看>>
Objective-C实现播放器(附完整源码)
查看>>