बिल्डरांना समाविष्ट करण्यापूर्वी आगाऊ युक्तिवाद करण्यास भाग पाडणे ही एक वाईट प्रथा आहे. तथापि, अनेकदा असे करणे आवश्यक असते. वितर्क म्हणून सादर केलेल्या वस्तूंसह काही हाताळणी करा आणि त्यानंतरच त्यांना बांधलेल्या ऑब्जेक्टच्या गुणधर्मांवर गुण द्या. या हेतूसाठी, मी पूर्ववर्ती वापरण्याचे सुचवितो, जे पद्धती किंवा वैयक्तिक वस्तू असू शकतात.

फ्रान्समध्ये प्रचंड (2019) – गड एल्मालेह. इतर.

मला सांगा, हा तुमचा पासवर्ड आहे.

import java.util.List;
import java.util.Collections;
class Books {
  private final List<String> titles;
  Books(List<String> list) {
    this.titles = Collections.unmodifiableList(list);
  }
}

एकमेव विकसकाला शीर्षकांची यादी खालीलप्रमाणे समाविष्ट करण्याची अपेक्षा आहे: this.titles भविष्यातील काही वापरासाठी. जेडीके डेकोरेटरच्या पत्त्यावर कोणत्याही अपघाती बदलांपासून ते संरक्षित आहे unmodifiableList. अजून तरी छान आहे. आता आम्हाला आमचे वर्ग थोडे हुशार बनवायचे आहेत, ते फक्त वर्गानेच स्वीकारले जाऊ नयेत List पण ओळींची एक श्रेणी.

class Books {
  private List<String> titles;
  Books(List<String> list) {
    this.titles = Collections.unmodifiableList(list);
  }
  Books(String... array) {
    final List<String> list = new ArrayList<>(array.length);
    for (final String title : array) {
      list.add(title);
    }
    this.titles = list;
  }
}

या कोडमध्ये काय चूक आहे? तुमच्यापैकी ज्यांनी आधी माझे वाचले आहे OOP बद्दल ब्लॉग पोस्ट अनेकांना उत्तर नक्की माहित आहे. सर्वप्रथम, दोन मुख्य बांधकामे आहेत, जी एक आहे वाईट सराव. दुसऱ्या, दुसऱ्या कन्स्ट्रक्टरमध्ये एक कोड आहे, जो देखील आहे वाईट कल्पना.

या दोन समस्यांचे निराकरण करण्यासाठी मी सहसा हा कोड कसा सुधारतो ते येथे आहे.

class Books {
  private List<String> titles;
  Books(List<String> list) {
    this.titles = Collections.unmodifiableList(list);
  }
  Books(String... array) {
    this(Books.toList(array));
  }
  private static List<String> toList(String... array) {
    final List<String> list = new ArrayList<>(array.length);
    for (final String title : array) {
      list.add(title);
    }
    return list;
  }
}

मी याला नवीन स्थिर पद्धत म्हणतो toList()पूर्वनिर्मितहे केवळ ऑब्जेक्टच्या बांधकामाच्या वेळी वापरले जाते, केवळ दुय्यम कन्स्ट्रक्टरकडून.

डिझाइन करण्याचा आणखी एक चांगला मार्ग म्हणजे नवीन वर्ग तयार करणे ToList, जे अगदी तसेच करेल, परंतु अधिक घोषणात्मक – आळशी मार्गाने.

class Books {
  private List<String> titles;
  Books(List<String> list) {
    this.titles = Collections.unmodifiableList(list);
  }
  Books(String... array) {
    this(new ToList(array));
  }
}
class ToList<T> implements List<T> {
  private final T[] array;
  ToList(T... items) {
    this.array = items;
  }
  // All required methods of the List interface
}

ListOf कडून: नारळ अशा अग्रदूत एक परिपूर्ण उदाहरण आहे.

आमच्या जेसीजी प्रोग्राम भागीदार येगोर बुगायेन्कोच्या परवानगीने जावा कोड गीक्स मध्ये प्रकाशित. मूळ लेख येथे पहा: Prestructors

जावा कोड गीक्स सहभागींनी व्यक्त केलेली मते त्यांची आहेत.