gpt4 book ai didi

java - 实现一组名为 `toJson()` 的 Java 泛型函数

转载 作者:行者123 更新时间:2023-11-30 03:15:28 24 4
gpt4 key购买 nike

我想实现一组名为 toJson() 的通用函数将对象转换为 JSON 字符串。与这篇文章非常相似,How to symmetrically implement serialize and deserialize template functions in C++

目前我只需要支持以下类型boolean , double , int , long , String 、数组和 ArrayList ,并允许任意组合,例如 int[][][][][] , ArrayList<ArrayList<int[]>>

序列化器.java:

import java.util.ArrayList;

public interface Serializer {
static String toJson(boolean value) {
return String.valueOf(value);
}
static String toJson(double value) {
return String.valueOf(value);
}
static String toJson(int value) {
return String.valueOf(value);
}
static String toJson(long value) {
return String.valueOf(value);
}
static String toJson(final String value) {
return "\"" + value + "\"";
}

static <T> String toJson(final T value) {
return String.valueOf(value);
}

static <T> String toJson(final T[] value) {
final StringBuilder result = new StringBuilder("[");

for (final T i : value) {
result.append(toJson(i));
result.append(',');
}

if (value.length > 0) result.delete(result.length() - 1, result.length());

result.append(']');

return result.toString();
}

static <T> String toJson(final ArrayList<T> value) {
final StringBuilder result = new StringBuilder("[");

for (final T i : value) {
result.append(toJson(i));
result.append(',');
}

if (value.size() > 0) result.delete(result.length() - 1, result.length());

result.append(']');

return result.toString();
}
}

单元测试:

import org.junit.Test;
import java.util.Arrays;
import static org.junit.Assert.assertEquals;


public class SerializerTest {

@Test public void primitiveToJsonTest() {
assertEquals("true", Serializer.toJson(true));
assertEquals("123.0", Serializer.toJson(123.000));
assertEquals("123", Serializer.toJson(123));
assertEquals("123", Serializer.toJson(123L));
assertEquals("\"123\"", Serializer.toJson("123"));
}

@Test public void containerToJsonTest() {
System.out.println(Serializer.toJson(new int[]{1,2,3,4,5})); // not correct !
assertEquals("[1, 2, 3, 4, 5]", Serializer.toJson(Arrays.asList(1,2,3,4,5)));
assertEquals("[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]",
Serializer.toJson(Arrays.asList(Arrays.asList(1,2,3,4,5), Arrays.asList(6,7,8,9, 10))));
}
}

唯一的问题是关于数组的,看来Java会处理T[]T .

有什么想法吗?

最佳答案

您实现的数组情况仅涵盖对象数组(例如Integer[]),您需要分别处理int[]和其他基本数组类型 - - 就像你处理 int 等一样。

这只是第一级的问题。对于 int[][] 等,“外部”数组是一个对象数组,因为 int[] 是一个 Object所以覆盖一个级别就足够了。

关于java - 实现一组名为 `toJson()` 的 Java 泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32757492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com