OOP(Java)-生成对象的最佳方法
如果我想用随机值生成一个简单对象的Java实例 例如,对于类:OOP(Java)-生成对象的最佳方法,java,oop,Java,Oop,如果我想用随机值生成一个简单对象的Java实例 例如,对于类: class Entity { int id; } 我想添加generate函数,用id的随机值初始化一个新实例 什么是最好的OOP方法?我考虑了两种选择: 要在实体类中创建静态方法,请执行以下操作: class Entity { int id; public static Entity generate(){ Entity e = new Entity (); int rand = Math
class Entity {
int id;
}
我想添加generate函数,用id的随机值初始化一个新实例
什么是最好的OOP方法?我考虑了两种选择:
class Entity {
int id;
public static Entity generate(){
Entity e = new Entity ();
int rand = MathUtil.generateRandomInt(); // method in util class
in the project.
e.setId(rand )
return e;
}
}
class EntityGenerator{
public Entity generate(){
Entity e = new Entity ();
int rand = MathUtil.generateRandomInt(); // method in util class
in the project.
e.setId(rand);
return e;
}
}
我犹豫什么是更好的选择。您只需要创建类的对象。它将自动填充随机数
import java.util.Random;
public class Entity {
private int id;
public Entity() {
id = new Random().nextInt(100000);//set the upper limit, it generated numbers between 0 and 99999
}
public int getId() {
return id;
}
public Entity setId(int id) {
this.id = id;
return this;
}
}
或者您可以在类中创建一个静态Random()
对象
public class Entity {
private static Random r = new Random();
private int id;
public Entity() {
id = r.nextInt(100000);//set the upper limit, it generated numbers between 0 and 99999
}
public int getId() {
return id;
}
public Entity setId(int id) {
this.id = id;
return this;
}
}
希望能有所帮助。选项1最好遵循“java中有效的joshua bloch”。你可以在第一章“静态工厂”中找到它。您也不需要新的EntityGenerator来创建实体,因此它将节省内存
class Entity {
int id;
public static Entity generate(){
Entity e = new Entity ();
int rand = MathUtil.generateRandomInt(); // method in util class
in the project.
e.setId(rand )
return e;
}
}
备选案文2:
分离的EntityGenerator
类(实际上是一个工厂)也适用,但也有一些限制
将是静态的,与public Entity generate()
一样李>public static Entity generate()
- 或者您必须使用
作为单例(即,在整个程序中只创建和使用一个实例)EntityGenerator
- 在每个类中为自己的类使用静态
方法generate
- 集中工厂在特殊的
类中创建所有类型EntityGenerator
实体
s需要其他信息时,才真正需要实体生成器
。然后,您可以在创建EntityGenerator
(可能会被视为工厂对象)时提供信息,然后EntityGenerator
可以在需要时将该信息传递给generate
。如果您不需要在创建每个实体时提供相同的信息,我看不出第二个选项有什么好处。遵循JDK模式,您将有一个用于静态工厂的实体类(cfgExecutorService
/Executors
,集合/集合等)@user2840073将其标记为答案。如果它能解决你的问题。谢谢为什么在setter中返回实体?实际上我使用的是builder模式。它将有助于创建空对象,并使用带点的指令序列设置属性。像object.setId(1.setName(“khalid”).setAge(25);而不是制作一个参数化的构造函数。那没关系,实际上我怀疑:),但提到它会让事情变得更清楚。