- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我有一个非常大的类,其中有数百个 transient 对象,每次加载父级(在本例中为 Person.class)时都需要重新初始化。 (Peron.class 已加载并保存)
这是我目前的类结构的示例:
public final class Person {
private transient ObjectA a;
private transient ObjectB b;
private transient ObjectC c;
private transient ObjectD d;
//and hundreds more...
public Person() {
initTransientObjects();
}
private void initTransientObjects() {
a = new ObjectA();
b = new ObjectB();
c = new ObjectC();
d = new ObjectD();
//and hundreds more...
}
public void onReloadAfterFirstSave() {
initTransientObjects();
}
}
这使得编写新对象变得非常乏味,我想知道是否有一种方法可以使它更紧凑,如下所示:
public final class Person {
private transient ObjectA a = new ObjectA();
private transient ObjectB b = new ObjectB();
private transient ObjectC c = new ObjectC();
private transient ObjectD d = new ObjectD();
//and hundreds more...
//this way I only have to type the new object once instead of twice
public void onReloadAfterFirstSave() {
//what here? because now transient fields are null
}
}
请注意,我无法使用上述内容的原因是,显然,当再次加载 Person 时, transient 字段将不会被加载,因此会自动设置为 null。
我应该在这里做什么?
编辑:
我还在 Person 类中保存了非 transient 对象以及这些 transient 字段,这就是为什么不选择使用它:
Peron person = new Person(); //every load
最佳答案
你可以尝试这个,但我不赞成这样做,主要是因为你需要非常小心异常(exception)情况。我假设您的 ObjectA、ObjectB、ObjectC 的构造函数不是空的,如果它们是空的,那么这将更容易实现。
我专门为你制作了一个示例类(class)
import java.lang.reflect.InvocationTargetException;
import java.util.Random;
/**
*
* @author emngaiden
*/
public class Test2 {
ClassContainer[] containers;
Object[] instantieted_objects;
public Test2() {
initObjects();
}
public static void main(String[] args) {
Test2 test=new Test2();
StringBuilder sb=(StringBuilder)test.getObject(2);
sb.append((String)test.getObject(0));
sb.append(((Random)test.getObject(1)).nextDouble());
System.out.println(sb.toString());
}
public Object getObject(int i){
return this.instantieted_objects[i];
}
private void initObjects() {
//total number of objects ObjectA, ObjectB etc...
int number_of_objects = 3;
this.containers = new ClassContainer[number_of_objects];
this.instantieted_objects = new Object[number_of_objects];
//create the containers, you write this only one, and can
//share it between objects of the same class
this.containers[0] = new ClassContainer(String.class,
new Class[]{String.class},
new Object[]{"hello world"}
);
this.containers[1] = new ClassContainer(Random.class,
new Class[]{long.class},
new Object[]{192323l}
);
this.containers[2] = new ClassContainer(StringBuilder.class,
null,
null
);
//poblate the objects in the array
for(int i=0; i<this.containers.length; i++){
try{
this.instantieted_objects[i]=instantiateObject(containers[i]);
}catch(Exception e){
e.printStackTrace();
}
}
}
//returns a new object instance based on the container
private Object instantiateObject(ClassContainer container)
throws NoSuchMethodException, InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
//no arguments for the constructor means that the constructor is empty
if(container.args!=null){
//get the constructor that matches the Class[] array on its arguments
return
container.obj.getConstructor(container.args)
.newInstance(container.values);
}
else{
return container.obj.newInstance();
}
}
//class to hold the necessary data to instantiate the object
public class ClassContainer {
//the target class, for ObjectA(int,int)this must be ObjectA.class
Class obj;
//the argument classes, it would be {int.class,int.class}
Class[] args;
//the actual values for the constructor, it would be {1,2}
Object[] values;
public ClassContainer(Class obj, Class[] args, Object[] values) {
this.obj = obj;
this.args = args;
this.values = values;
}
}
}
这编写起来很有趣,但我不建议使用它。
关于Java OOP transient 字段在加载 POJO 父级时初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52549040/
我刚刚发现了 Camel,它似乎正是我所需要的。 我有几个知道如何处理特定输入数据的构建 block ,所以我想创建一个非常简单的 GUI 供用户选择构建 block ,只需将它们一个接一个地链接起来
根据Convert Spark DataFrame to Pojo Object的回复我了解到 Dataframe是 Dataset 的别名. 我目前计算了 JavaPairRDD哪里CityStat
我使用的是jackson,场景是: 在客户端 (Android) 中生成对 Web 服务的 URL 调用 Web 服务以 json 形式返回“complex pojo”(具有与其他 pojo 相同的类
我需要将文档存储到 Elasticsearch 索引中,因此我定义了一个映射。我需要从我的 java 客户端向它提供看起来像 Compony 类的 pojo。它有很多重复的值。我可以使用对象组合模式来
所以我正在开发一个聊天应用程序。有一部分我感兴趣的是一次从数据库中检索 3 个实体。有一个 serverDto 实体和 accountDto 实体。每个服务器都有很多账户,账户里有一个字段叫做acti
我有一个 Java 中的 POJO 列表,我需要将其转换为另一种类型的 POJO 列表。两个 POJO 都有两个字符串字段。除了迭代原始列表并将新项目添加到结果列表之外,是否有更好的方法来执行此操作?
我正在开发一个 API 来访问存储在系统中的数据。该系统包含人员、约会和与这些约会相关的程序等内容。我的应用程序将严格为只读。 我正在使用带 RowMapper 的 Spring 来构建对象,例如“P
希望有人能帮助我。我有一个具有以下结构的 POJO: public class Invoice{ private String docNum; private String customer; pri
引用以下链接,我在运行时创建了类,http://blog.javaforge.net/post/31913732423/howto-create-java-pojo-at-runtime-with-j
所以我遇到了这个教程,将 POJO 序列化为 json,然后将 json 文件反序列化回 POJO。 http://www.mkyong.com/java/how-to-convert-java-ob
我是 Java 的新手。我只是对序列化和反序列化感到困惑。所以,我很困惑我应该使用哪一个。 我正在寻找一个回合,发现 Boon、Jackson、GSON(我目前正在使用 GSON,但一些文章使用 Ja
我确信这个问题可能已经被问过几次了,但我不明白我应该使用什么查询。我想要做的是,将 POJO 传递给另一个参数可以是动态的 POJO 像下面的例子 Class DataPOJO{ privat
我有一个有多页的注册表。所以,我将一页映射到一个 pojo。最后,当我处理数据库时,我想将其作为单个 pojo 提交。任何简化此模型的想法。 谢谢:) 最佳答案 您可以创建一个包装器 POJO,它在主
希望有人能帮助我。我有一个具有以下结构的 POJO: public class Invoice{ private String docNum; private String customer; pri
要求: 将 json 文件中选定的字段收集到 POJO 中(字段名称不匹配) 更新 POJO 的其他非映射字段 转换回带有 POJO 字段名的 jsonNode 问题:步骤 1 和 2 没问题。当将
我的 Spring Boot 应用程序中有两个 Pojo Pojo 1:FeedData 代码(我有获取和设置,只是没有在这里显示): package com.cms.tb.model; import
我们有两个 Pojo 文件。 Person { String name; int age; String address; String phoneNo; boolean isMa
我有一个数据库调用,如果没有任何条件匹配,则可能返回 null。如果有记录匹配,则结果是一个包含嵌入对象列表的 Pojo。我想将该 Pojo 转换为其嵌入对象 id 的列表。 Foo.class 有
我正在尝试使用流将 pojo 映射到 pojo 上的属性公开的一组项目。我意识到这还不清楚,所以我将展示我是如何在没有流的情况下完成的。 我有产品类别的枚举,产品的枚举和具有此类产品的商店列表 pub
我们在 Apache2 网络服务器后面的 Tomcat 6 中运行的 AXIS2 v1.5.2 中实现了一个 POJO 网络服务。 出于演示目的,我将重点介绍 validateUser 消息和相应的方
我是一名优秀的程序员,十分优秀!