我经常发现自己想将一个活的 java 对象复制到我的测试中(在源代码中)。我怀疑这通常是可行的,但也许asJavaSourceCode()
可以为所有@AutoValue
对象生成一个方法?
这是一些代码来演示我想要的。
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class Person {
public abstract String name();
public abstract Integer age();
public static Person create(String name, Integer age) {
return new AutoValue_Person(name, age);
}
public String asJavaSourceCode() {
// Can this code be automatically generated?
return "Person.create(\"" + name() + "\"," + age() + ")";
}
public static void main(String[] args) {
System.out.println(Person.create("Jordan", 29));
System.out.println(Person.create("Jordan", 29).asJavaSourceCode());
}
}
运行这个我得到。
Person{name=Jordan, age=29}
Person.create("Jordan",29)
我会认为其中任何一个都是对这个问题的有效答案:
- “是的,这是一个图书馆链接”
- “不,它还不存在”
- “其他人也做过类似的事情。”
- “这是不好的做法,不要这样做,请参阅 Effective Java Book Item XYZ”