apache / apache/fory

[Java] object deep copy into different type

Open
#1,975 2 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Java
Stars
4.5k
Forks
443
Avg merge
5h 59m
Merged PRs (30d)
77

Description

### 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:

```java
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:
```java
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

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.