2015-09-24 2 views
1

Если у меня есть несколько конструкторов в классе, как мне избежать дублирования кода для тех полей, которые инициализируются одинаково для всех конструкторов, или это не предпочтительнее?java multiple constructors

Например:

class ComparableThing<K extends Comparable<K>> { 
    private int someField; 
    private Comparator<K> comparator; 

    public ComparableThing() { 
    this.someField = 0; 
    this.comparator = Comparator.naturalOrder(); 
    } 

    public ComparableThing(Comparator<K> comp) { 
    this.someField = 0; 
    this.comparator = comp; 
    } 
} 

Есть ли способ, чтобы избежать дублирования кода в инициализации someField, или этот дубликат кода считается приемлемым/предпочтительней?

ответ

1

Вы можете цепью конструкторов. Вызовите более общий конструктор из более конкретного конструктора. Это не редкость.

class ComparableThing<K extends Comparable<K>> { 
    private int someField; 
    private Comparator<K> comparator; 

    public ComparableThing(Comparator<K> comp) { // more general constructor 
    this.someField = 0; 
    this.comparator = comp; 
    } 

    public ComparableThing() { 
    this(Comparator.naturalOrder()); 
    } 
}