我一直很好奇的东西
public class FileDataValidator {
private String[] lineData;
public FileDataValidator(String[] lineData){
this.lineData = lineData;
removeLeadingAndTrailingQuotes();
try
{
validateName();
validateAge();
validateTown();
}
catch(InvalidFormatException e)
{
e.printStackTrace();
}
}
//validation methods below all throwing InvalidFormatException
不建议在我的构造函数中包含try /
catch块吗?我知道我可以让构造函数将异常抛出给调用方。你们喜欢像我在Constructor中完成的那样调用方法吗?在调用类中,您希望创建FileDataValidator的实例并在该实例上调用该方法吗?只是有兴趣听到一些反馈!
在显示的代码中,验证问题不会传达给正在创建此对象实例的代码。那可能不是一件好事。
变化1:
如果您在方法/构造函数内部捕获到异常,请确保将某些内容传递回调用方。isValid
如果所有方法都可以,则可以将字段设置为true。看起来像这样:
private boolean isValid = false;
public FileDataValidator(String[] lineData){
this.lineData = lineData;
removeLeadingAndTrailingQuotes();
try
{
validateName();
validateAge();
validateTown();
isValid = true;
}
catch(InvalidFormatException e)
{
isValid = false;
}
}
public boolean isValid() {
return isValid;
}
变体2:
或者,您可以让异常或某些其他异常传播到调用方。我已将其显示为未经检查的异常,但是根据您的异常处理方式,可以执行任何工作:
public FileDataValidator(String[] lineData){
this.lineData = lineData;
removeLeadingAndTrailingQuotes();
try
{
validateName();
validateAge();
validateTown();
}
catch(InvalidFormatException e)
{
throw new com.myco.myapp.errors.InvalidDataException(e.getMessage());
}
}
变体3:
我要提到的第三个方法具有这样的代码。在调用代码中,您必须先调用构造函数,然后再调用有效的build()
函数。
String[] lineData = readLineData();
FileDataValidator onePerson = new FileDataValidator();
try {
onePerson.build(lineData);
} catch (InvalidDataException e) {
// What to do it its bad?
}
这是类代码:
public FileDataValidator() {
// maybe you need some code in here, maybe not
}
public void build(String[] lineData){
this.lineData = lineData;
removeLeadingAndTrailingQuotes();
try
{
validateName();
validateAge();
validateTown();
}
catch(InvalidFormatException e)
{
throw new com.myco.myapp.errors.InvalidDataException(e.getMessage());
}
}
当然,该build()
函数可以使用isValid()
您调用的方法来查看其是否正确,但是对于我来说,对于构建函数而言,异常似乎是正确的方法。
变体4:
我要提到的第四个方法是我最喜欢的方法。它具有这样的代码。在调用代码中,您必须先调用构造函数,然后再调用有效的build()
函数。
遵循JaxB和JaxRS的工作方式,这与您所遇到的情况类似。
调用代码:
String[] lineData = readLineData();
Person onePerson = new Person();
FileDataUtilities util = new FileDataUtilities();
try {
util.build(onePerson, lineData);
util.validate(onePerson);
} catch (InvalidDataException e) {
// What to do it its bad?
}
这是数据所在的类代码:
public class Person {
private Name name;
private Age age;
private Town town;
... lots more stuff here ...
}
以及用于构建和验证的实用程序代码:
public FileDataValidator() {
// maybe you need some code in here, maybe not
}
public void build(Person person, String[] lineData){
this.lineData = lineData;
removeLeadingAndTrailingQuotes();
setNameFromData(person);
setAgeFromData(person);
setTownFromData(person);
}
public boolean validate(Person person) {
try
{
validateName(person);
validateAge(person);
validateTown(person);
return true;
}
catch(InvalidFormatException e)
{
throw new com.myco.myapp.errors.InvalidDataException(e.getMessage());
}
}
问题内容: java中的clone方法vs复制构造函数。哪个是正确的解决方案。每种情况在哪里使用? 问题答案: 克隆已损坏,因此请勿使用。 Object类的CLONE方法是一种有些神奇的方法,它没有纯Java方法可以做的事情:它产生其对象的相同副本。自Java编译器的Beta版本发布以来,它就已经存在于原始Object超类中。就像所有古代魔法一样,它需要适当的咒语以防止该法术意外地反射击 首选复制
本文向大家介绍完全掌握C++编程中构造函数使用的超级学习教程,包括了完全掌握C++编程中构造函数使用的超级学习教程的使用技巧和注意事项,需要的朋友参考一下 构造函数是一种可初始化其类的实例的成员函数。构造函数具有与类相同的名称,没有返回值。构造函数可以具有任意数量的参数,类可以具有任意数量的重载构造函数。构造函数可以具有任何可访问性(公共、受保护或私有)。如果未定义任何构造函数,则编译器会生成不采
问题内容: 据我所知,一个唯一可以做的事和一个不能做的事就是打电话给。 由于我们尚未调用,因此in 会在进入第一遍之前准备状态对象。本质上是相同的: 但是我看到了另一个有用的用例(在服务器端)。 让我们考虑一些异步的东西: 在这里,我们不能使用as分配来不会触发。 怎么样的?根据React docs : 在挂载发生之前立即调用。在之前调用),因此在此方法中设置状态不会触发重新渲染。避免在此方法中引
本文向大家介绍轻松掌握Java建造者模式,包括了轻松掌握Java建造者模式的使用技巧和注意事项,需要的朋友参考一下 建造者模式针对的是复杂对象的构建,比如一个产品有多个部分构成,每个部分都可以单独进行生产,这时候就可以用建造者模式,由Builder构造产品的每个部分,然后又director完成最后产品的组装。 特点: 1、分工更加明确,组建和构造分开,能更好的控制产品的生产。 2、
问题内容: 鉴于Main.java: 结果为: 0 4. 但是,如果a.print输出引用A类,为什么为什么不输出“ A”呢?我怎么知道在这种情况下何时调用一种方法?为什么要调用A的构造函数而仍然使用B的方法? 问题答案: 由于多态性而调用打印。调用的方法取决于的运行时类型,即。何时调用无关紧要;多态总是适用。 两次都调用的方法。一次来自的构造函数,由中的默认构造函数调用。另外一次是您显式致电。
例如,我有一个这样的课; 我要做的是为模拟的构造函数编写单元测试。 如果是静态的,那么这将很容易,因为我可以使用然后调用构造函数。 有人知道有什么办法吗?