使用私有Setter或在构造函数中工作

时间:2016-02-10 19:18:23

标签: java class exception

我有以下Book类:

    public Book(String bookTitle,ConcurrentHashMap<Integer,String> authors, String bookType ) throws InvalidDataException{

        this.setBookTitle(bookTitle);
        this.setAuthors(authors);
        this.setType(bookType);

    }

    private void setBookTitle(String title) throws InvalidDataException
    {  if(title == null || title.length() < 1){
            throw new InvalidDataException("Must Provide Book Title");
        }
        this.bookTitle = title;
    }

    private void setAuthors(ConcurrentHashMap<Integer,String> authors) throws InvalidDataException
    {   if(authors.isEmpty()){
            throw new InvalidDataException("Must Provide At least one author");
        }
        this.authors = new ConcurrentHashMap<Integer,String>(authors);
    }

    private void setType(String type) throws InvalidDataException
    {
        if(type == null || type.length() < 1){
            throw new InvalidDataException("Must Provide Book Type");
        }
        this.bookType = type;
    }

我应该让我的构造函数调用setter方法(我喜欢这种方法,因为它有条理,对我来说更容易)或检查构造函数中的变量并在需要时抛出异常并删除setter?然后,我将使变量final。哪种方法更好?

1 个答案:

答案 0 :(得分:2)

你的方法很好,

但是您可以利用已有的框架来抛出异常, 即Spring注释,如@ NotNull,@ NotEmpty,@ Valid等。

你会发现他们正以更优雅的开箱即用方式为你提供你正在做的事情。 :)

例如

for (var i=0; i<vm.tags.length; i++) {
    for(var j=0; j<3; j++){
        if (vm.tags[i].term_id === tag.term_id) {
            if (vm.tags[i]['border' + j]) {
                vm.tags[i]['border' + j] = false;
            }
        }
    }
}

\p{Punct}让你了解更多:)也看看java的maven项目来处理你的依赖关系..信任我。