我对这个问题没有更好的称号,你可以帮我改变它。
class Example {
class A {
private String str;
public String getStr() {
return str==null ? "nothing" : str;
}
public void setStr(String str) {
this.str = str;
}
}
public static void main(String[] args) {
A a = null;
loadA(a);
System.out.println(a.getStr());
}
private static void loadA(A a) {
// a = ****;
// in my project, a is load from a json string using Gson
// Gson cannot modify a Object, it can only create a new one, say b
// I tried to copy every field from b to a
// but the method getStr do not always return the true str
// so I may have to create another method "getTrueStr()" which feels bad
}
}
考虑解决方案和问题:
a = Gson.createAnotherA()
它没有用。
但方法getStr()
并不总是返回真正的str,所以我可能需要创建另一个让我感觉不好的方法getTrueStr()
。
clone()
让我感觉更糟。
a = loadA(a)
; loadB()
,loadC()
并且他们不需要这种语法,它看起来只是不和谐。如果没有更好的解决方案,我选择这个。
问题是,如果我不选择任何给定的解决方案,我该怎么办?
或
如果我在某个方法中获得了引用A a
,那么如何在不使用clone()
以及我上面写的内容的情况下将其与另一个对象相同。
答案 0 :(得分:2)
我认为你的问题实际上在于你的getStr
方法,它不是一个真正的吸气剂,它包含一些逻辑。是否有可能处理这个课外A
?
据我了解,您希望创建对象b
(类型为A
),它是现有实例a
的副本。
因为从JSON加载a
,您可以再次读取JSON,这应该创建一个新实例。我想由于某种原因你不能这样做。
您可以创建“复制构造函数”,而不是使用JSON序列化程序或clone
方法(根本不应该使用它 - 它有多个缺陷),
class A {
private String str;
public A() {}
public A(A that) {
this.str = that.str;
}
public String getStr() {
return str==null ? "nothing" : str;
}
public void setStr(String str) {
this.str = str;
}
}
答案 1 :(得分:0)
我出来了。完全满足我的需求,看起来很不错。
A级{
private A reference;
private String name;
public A() {
reference = this;
}
public void setReference(A ref) {
reference = ref;
}
public void setName(String name) {
reference.name = name;
}
public String getName() {
return reference.name;
}
}