[Java] object deep copy into different type

Đang mở
#1,975 2 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
25/100
Loại issue
Tính năng
Độ rõ ràng
Cần làm rõ
Mức độ hoạt động
Đình trệ
Công nghệ
java
Lĩnh vực
backend

Hướng nghiên cứu

Không có tệp nguồn, bài kiểm thử hoặc điểm vào nào được nêu. Hãy bắt đầu bằng cách lần theo cơ chế sao chép sâu đối tượng hiện tại và xem lại discussions/1973 cùng pull/1974 để hiểu API dự kiến và các ràng buộc thiết kế. Hoàn thành có nghĩa là hỗ trợ sao chép sâu trực tiếp giữa các kiểu khác nhau, giữ lại các trường tương ứng trong ví dụ mà không thực hiện vòng chuyển đổi qua lại bằng bộ đệm tuần tự hóa.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

enhancement
Feature Request

We've supported object deep copy of object from one instance to another instance, but we still don't support deep copy object from one type into another type.

Is your feature request related to a problem? Please describe

deep copy object from one type into another type:

class Struct1 {
  int f1;
  String f2;

  public Struct1(int f1, String f2) {
    this.f1 = f1;
    this.f2 = f2;
  }
}

class Struct2 {
  int f1;
  String f2;
  double f3;
}

Struct1 s1 = xxx;
Struct2 struct2 = copyTo(s1, Struct2.class)
Describe the solution you'd like

Extend the current object deep copy mechanism

Describe alternatives you've considered

Mock by:

public class StructMappingExample {
  static class Struct1 {
    int f1;
    String f2;

    public Struct1(int f1, String f2) {
      this.f1 = f1;
      this.f2 = f2;
    }
  }

  static class Struct2 {
    int f1;
    String f2;
    double f3;
  }

  static ThreadSafeFury fury1 = Fury.builder()
    .withCompatibleMode(CompatibleMode.COMPATIBLE).buildThreadSafeFury();
  static ThreadSafeFury fury2 = Fury.builder()
    .withCompatibleMode(CompatibleMode.COMPATIBLE).buildThreadSafeFury();

  static {
    fury1.register(Struct1.class);
    fury2.register(Struct2.class);
  }

  public static void main(String[] args) {
    Struct1 struct1 = new Struct1(10, "abc");
    Struct2 struct2 = (Struct2) fury2.deserialize(fury1.serialize(struct1));
    Assert.assertEquals(struct2.f1, struct1.f1);
    Assert.assertEquals(struct2.f2, struct1.f2);
    struct1 = (Struct1) fury1.deserialize(fury2.serialize(struct2));
    Assert.assertEquals(struct1.f1, struct2.f1);
    Assert.assertEquals(struct1.f2, struct2.f2);
  }
}

This will work, but not that efficient cause it will write/read buffer.

Additional context

https://github.com/apache/fury/discussions/1973
https://github.com/apache/fury/pull/1974

Ngôn ngữ chính
Java
Star
4.6k
Fork
470
Merge trung bình
9 giờ 28 phút
Pull request đã merge (30 ngày)
33

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của apache/fory

Tất cả issue của apache/fory

Issue tương tự

Thêm issue về Java

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.