Как насчет добавления некоторых статических методов преобразования?
class C {
private:
static B transform1(D&);
static B transform2(D&);
public:
A a;
C(D d) :
a{transform1(d),transform2(d)}
{}
};
Связано:
Этот класс генерирует циклы, когда вы запускаете их методы получения. Чтобы их сломать, нужно использовать аннотацию JsonBackReference
. Ваш mixin
может выглядеть так:
@JsonIgnoreProperties(ignoreUnknown = true)
abstract class DefaultMutableTreeNodeMixIn {
@JsonCreator
public DefaultMutableTreeNodeMixIn(@JsonProperty Object userObject) {
}
@JsonCreator
public DefaultMutableTreeNodeMixIn(@JsonProperty Object userObject, @JsonProperty boolean allowsChildren) {
}
@JsonProperty("childCount")
abstract int getChildCount();
@JsonProperty("depth")
abstract int getDepth();
@JsonProperty("firstChild")
@JsonBackReference
abstract TreeNode getFirstChild();
@JsonProperty("firstLeaf")
@JsonBackReference
abstract DefaultMutableTreeNode getFirstLeaf();
@JsonProperty("lastChild")
@JsonBackReference
abstract TreeNode getLastChild();
@JsonProperty("lastLeaf")
@JsonBackReference
abstract DefaultMutableTreeNode getLastLeaf();
@JsonProperty("leafCount")
abstract int getLeafCount();
@JsonProperty("level")
abstract int getLevel();
@JsonProperty("nextLeaf")
abstract DefaultMutableTreeNode getNextLeaf();
@JsonProperty("nextNode")
abstract DefaultMutableTreeNode getNextNode();
@JsonProperty("nextSibling")
abstract DefaultMutableTreeNode getNextSibling();
@JsonProperty("parent")
abstract TreeNode getParent();
@JsonProperty("path")
@JsonBackReference
abstract TreeNode[] getPath();
@JsonProperty("previousLeaf")
abstract DefaultMutableTreeNode getPreviousLeaf();
@JsonProperty("previousNode")
abstract DefaultMutableTreeNode getPreviousNode();
@JsonProperty("previousSibling")
abstract DefaultMutableTreeNode getPreviousSibling();
@JsonProperty("siblingCount")
abstract int getSiblingCount();
@JsonProperty("isLeaf")
abstract boolean isLeaf();
@JsonProperty("isRoot")
abstract boolean isRoot();
}
Но, вероятно, самый лучший и самый OOP
способ - это создать новый POJO
, представляющий ваше дерево, готовое к сериализации и без циклов.
Как указано в документации Джексона: https://fasterxml.github.io/jackson-annotations/javadoc/2.6/com/fasterxml/jackson/annotation/JsonProperty.html
< blockquote>public @interface JsonProperty
Аннотация маркера, которую можно использовать для определения нестатического метода в качестве «установщика» или «получателя» для логического свойства (в зависимости от его сигнатуры) или не -статическое поле объекта, которое будет использоваться (сериализовано, десериализовано) в качестве логического свойства.
blockquote>Я думаю, что вы аннотировали методы, которые не являются установщиками или получателями свойств.
Например:
@JsonProperty("previousNode")
abstract DefaultMutableTreeNode getPreviousNode();
Этот метод, похоже, не получает свойства, вместо этого он вычисляет узел. Попробуйте удалить все аннотации к методам, чтобы посмотреть, решит ли это проблему.