如何强制 java 对象以特定顺序实例化它的实例变量?
How to force java object to instantiate it's instance variables in specific order?
有 class:
class Test {
Object1 object1;
Object2 object2;
void setObject2 (Object2 newObject) {
if (object1.someMethod()) {
this.object2 = newObject;
} else {
someOtherMethod();
}
}
}
如何强制 object1
必须在 object2
之前实例化的对象实例化?
暂时想到解决
1.by 以 Object2
作为参数创建构造函数并在那里实例化它
Test(Object1 object1) {
this.object1 = object1;
}
2.by 从尝试设置 object2
的方法中抛出异常
void setObject2 (Object newObject) {
if (object1 == null) {
throw new Exception();
}
...
还有其他更合适的实现方式吗?
我需要它的原因是我必须为区域 object1
创建新的广告活动 Test
来宣传该区域的一些网站 object2
。在将网站添加到广告系列之前,我想检查该网站是否属于该地区。
您可以限制 object2
的初始化,以便它只能在 object
已经被实例化的情况下被实例化。
public void setObject2 (Object2 newObject) {
if(object1 == null){
throw new IllegalStateException();
}else{
this.object2 = newObject;
}
}
是的,应使用构造函数将变量初始化为适当的状态,您实际上可以创建一个 Test class constructor
来实现相同的效果,如下所示:
public Test(Object1 obj1, Object2 obj2) {
//if objects are null throw an error
if(obj1 == null) {
throw IllegalStateException("Invalid Object1 passed");
} else {
this.obj1 = obj1;
//check someMethod() returns true and then set object2
if (obj1.someMethod()) {
this.obj2 = obj2;
} else {
//obj1.someMethod() is false, call someOtherMethod()
someOtherMethod();
}
}
如果强制变量状态未正确初始化,最好从构造函数中抛出 Exception
(如上),这样对象在创建后就不会处于不一致状态。
一种更简洁的设计方式是使用构建器模式。这样您就可以仅以正确的方式设置和创建您的对象,而不是在运行时出现异常。
程序员不需要阅读文档或错误消息来找出他需要做什么,因为 API 会自己完成 "guiding"。
有 class:
class Test {
Object1 object1;
Object2 object2;
void setObject2 (Object2 newObject) {
if (object1.someMethod()) {
this.object2 = newObject;
} else {
someOtherMethod();
}
}
}
如何强制 object1
必须在 object2
之前实例化的对象实例化?
暂时想到解决
1.by 以 Object2
作为参数创建构造函数并在那里实例化它
Test(Object1 object1) {
this.object1 = object1;
}
2.by 从尝试设置 object2
void setObject2 (Object newObject) {
if (object1 == null) {
throw new Exception();
}
...
还有其他更合适的实现方式吗?
我需要它的原因是我必须为区域 object1
创建新的广告活动 Test
来宣传该区域的一些网站 object2
。在将网站添加到广告系列之前,我想检查该网站是否属于该地区。
您可以限制 object2
的初始化,以便它只能在 object
已经被实例化的情况下被实例化。
public void setObject2 (Object2 newObject) {
if(object1 == null){
throw new IllegalStateException();
}else{
this.object2 = newObject;
}
}
是的,应使用构造函数将变量初始化为适当的状态,您实际上可以创建一个 Test class constructor
来实现相同的效果,如下所示:
public Test(Object1 obj1, Object2 obj2) {
//if objects are null throw an error
if(obj1 == null) {
throw IllegalStateException("Invalid Object1 passed");
} else {
this.obj1 = obj1;
//check someMethod() returns true and then set object2
if (obj1.someMethod()) {
this.obj2 = obj2;
} else {
//obj1.someMethod() is false, call someOtherMethod()
someOtherMethod();
}
}
如果强制变量状态未正确初始化,最好从构造函数中抛出 Exception
(如上),这样对象在创建后就不会处于不一致状态。
一种更简洁的设计方式是使用构建器模式。这样您就可以仅以正确的方式设置和创建您的对象,而不是在运行时出现异常。
程序员不需要阅读文档或错误消息来找出他需要做什么,因为 API 会自己完成 "guiding"。