https://blog.csdn.net/JokerLJG/article/details/128573849
@JsonUnwrapped 用于指示在序列化或反序列化过程中展开(unwrapped)包装的属性。
当一个类中包含了另一个类的对象作为属性,并且希望在序列化或反序列化时将该属性的字段直接展开到父类中,而不是嵌套在一个额外的对象中
如:
public class Person {
private String name;
@JsonUnwrapped
private Address address;
// 省略构造函数、getter 和 setter 方法
}
public class Address {
private String street;
private String city;
// 省略构造函数、getter 和 setter 方法
}
-----------------------------------------------------------
{ "name": "John", "street": "123 Main St", "city": "New York"}
内部类是定义在另一个类内部的类。内部类可以访问其外部类的成员,并且可以提供更好的封装和组织代码的方式。以下是Java中定义内部类的几种方式:
成员内部类(Member Inner Class):
成员内部类是定义在另一个类的内部的普通类。它可以访问外部类的成员变量和方法,包括私有成员。成员内部类的定义通常在外部类的成员位置,可以使用访问修饰符(public、private、protected)来控制其访问权限。
-----这一实现是通过在创建内部类实例时秘密捕获一个外部类实例的引用完成的。也就是说,一个内部类在实例化时必定需要依赖一个外部类的实例,所以内部类不可单独实例化存在。
OuterClass outer = new OuterClass(); // 创建外部类的实例
OuterClass.InnerClass inner = outer.new InnerClass(); // 使用外部类的实例来创建内部类的实例
public class OuterClass {
// 外部类的成员变量和方法
public class InnerClass {
// 内部类的成员变量和方法 }
}
静态内部类(Static Inner Class): https://blog.51cto.com/u_16099249/7750328
静态内部类是使用 static 关键字定义的内部类。它与外部类的实例无关,可以直接访问外部类的静态成员,但不能直接访问外部类的非静态成员。静态内部类的定义通常在外部类的成员位置,可以使用访问修饰符来控制其访问权限。
OuterClass.InnerClass instance = new OuterClass.InnerClass();
public class OuterClass {
// 外部类的成员变量和方法
public static class InnerClass {
// 内部类的成员变量和方法 }
}
方法内部类(Method Local Inner Class):
方法内部类是定义在方法内部的类。它只在所属方法的作用域内可见,不能使用访问修饰符修饰。方法内部类可以访问所在方法的参数和局部变量,但这些变量必须声明为 final 或是事实上的 final 变量(Java 8+)。
public class OuterClass {
public void someMethod() {
// 方法内部类定义在方法内部
class InnerClass {
// 内部类的成员变量和方法 }
}
}
匿名内部类(Anonymous Inner Class):
匿名内部类是没有显式定义类名的内部类,它通常用作接口的实现或抽象类的子类。匿名内部类没有构造方法,它的定义和实例化通常在同一处完成。
public class OuterClass {
public void someMethod() {
// 匿名内部类实现了接口 SomeInterface obj = new SomeInterface() {
// 内部类的实现代码 };
}
}
这些是Java中定义内部类的几种常见方式。每种方式都有其特定的用途和限制。根据需求选择适合的内部类类型来组织和封装代码。