我有一个简单的pojo
class animal{
private String name;
animal(String name){
this.name = name;}
private Features features;
private int max_life;
//
*
* other properties and their getter's and setter's
*//
}
现在,一旦我使用任何name
初始化POJO的名称,我都希望其余属性自动填充。
例如:animal("cat")
应该基于猫自动填充其他属性,例如max_life
和features
。
是否有任何属性的文件或任何方法可以检测到初始化并自动使用预定义的属性填充它们?
答案 0 :(得分:3)
您有一些选择:
1-在构造函数中初始化
class Animal {
private String maxLife;
public Animal (String name) {
switch(name) {
case "cat":
maxLife = 10;
case "dog":
maxLife = 20;
default:
maxLife = 1;
}
}
}
2-使用继承:
abstract class Animal {
String name;
int maxLife;
}
class Cat extends Animal {
public Cat() {
maxLife = 10;
}
}
class Dog extends Animal {
public Dog() {
maxLife = 20;
}
}
3-使用工厂(具有选项2的类):
class AnimalFactory {
public static Animal create(String name) {
switch(name) {
case "cat":
return new Cat();
case "dog":
return new Dog();
}
}
}
此外,在Java中,约定是使用CamelCase。对于类,应使用大写字母,对于变量/字段,应以小写字母开头。
答案 1 :(得分:0)
有一个名为Podam的库,可以自动填充Pojo。我在链接下方提供。
https://mtedone.github.io/podam/
要引用链接,您必须像这样使用。
// Simplest scenario. Will delegate to Podam all decisions
PodamFactory factory = new PodamFactoryImpl();
// This will use constructor with minimum arguments and
// then setters to populate POJO
Pojo myPojo = factory.manufacturePojo(Pojo.class);
// This will use constructor with maximum arguments and
// then setters to populate POJO
Pojo myPojo2 = factory.manufacturePojoWithFullData(Pojo.class);
// If object instance is already available,
// Podam can fill it with random data
Pojo myPojo3 = MyFactory.getPojoInstance();
factory.populatePojo(myPojo3);
答案 2 :(得分:0)
我实际上可以想到几种实现这种事情的方法。但是,您要寻找的是工厂。
想法是:工厂接收动物的种类,并根据种类创建实例。
通常,最基本(尽管很糟糕)的示例是:
public class AnimalFactory {
public Animal create(String name) {
if (name.equals(“cat”)) {
return new Animal(...);
}
// other
}
}
然后您可以像这样创建动物
AnimalFactory factory = new AnimalFactory();
Animal kitty = factory.create(“cat”);
这可以通过多种方式完成,并且可以在很多方面进行改进。详细了解工厂设计模式。
答案 3 :(得分:0)
为此,您可以使用Factory Design Pattern,可能与Strategy Design Pattern结合使用。
答案 4 :(得分:0)
class Animal{
private String name;
Animal(String name)
{
this.name = name;
switch(name){
case "cat":
this.features = new Features("cat");
this.max_life = 16;
break;
case "dog":
this.features = new Features("dog");
this.max_life = 15;
break;
default:
this.features = new Features("unknown");
this.max_life = 0;
break;
}
}
private Features features;
private int max_life;
//
*
* other properties and their getter's and setter's
*//
}
答案 5 :(得分:0)
除了我建议使用的Abstract Factory Pattern外,您还可以考虑使用Prototype Pattern。