Best way to handle multiple constructors in Java

后端 未结 9 1460
没有蜡笔的小新
没有蜡笔的小新 2020-12-02 07:00

I\'ve been wondering what the best (i.e. cleanest/safest/most efficient) way of handling multiple constructors in Java is? Especially when in one or more constructors not al

9条回答
  •  被撕碎了的回忆
    2020-12-02 07:44

    I would do the following:

    public class Book
    {
        private final String title;
        private final String isbn;
    
        public Book(final String t, final String i)
        {
            if(t == null)
            {
                throw new IllegalArgumentException("t cannot be null");
            }
    
            if(i == null)
            {
                throw new IllegalArgumentException("i cannot be null");
            }
    
            title = t;
            isbn  = i;
        }
    }
    

    I am making the assumption here that:

    1) the title will never change (hence title is final) 2) the isbn will never change (hence isbn is final) 3) that it is not valid to have a book without both a title and an isbn.

    Consider a Student class:

    public class Student
    {
        private final StudentID id;
        private String firstName;
        private String lastName;
    
        public Student(final StudentID i,
                       final String    first,
                       final String    last)
        {
            if(i == null)
            {
                throw new IllegalArgumentException("i cannot be null"); 
            }
    
            if(first == null)
            {
                throw new IllegalArgumentException("first cannot be null"); 
            }
    
            if(last == null)
            {
                throw new IllegalArgumentException("last cannot be null"); 
            }
    
            id        = i;
            firstName = first;
            lastName  = last;
        }
    }
    

    There a Student must be created with an id, a first name, and a last name. The student ID can never change, but a persons last and first name can change (get married, changes name due to losing a bet, etc...).

    When deciding what constrructors to have you really need to think about what makes sense to have. All to often people add set/get methods because they are taught to - but very often it is a bad idea.

    Immutable classes are much better to have (that is classes with final variables) over mutable ones. This book: http://books.google.com/books?id=ZZOiqZQIbRMC&pg=PA97&sig=JgnunNhNb8MYDcx60Kq4IyHUC58#PPP1,M1 (Effective Java) has a good discussion on immutability. Look at items 12 and 13.

提交回复
热议问题