在執行任務期間,我看到其他開發人員,他們使用@allargsconstructor(access = accesslevel.private)建立了乙個類,該類使該類的建構函式私有.然後,他們使用代替建立乙個物件.
使用new和of建立之間有什麼區別?
a a = new a();
a a = a.of();
@allargsconstructor(access = accesslevel.private)
@equalsandhashcode
public class a
}
最佳答案
隨著時間的流逝,很明顯的是,由於您沒有在呼叫中命名引數,因此,如果可選值具有相同的型別,則很難使用各種方法來建立物件.
乙個(相當愚蠢的)示例是person類,該類可能僅允許指定名字或姓氏.在這種情況下,以下建構函式將無法工作:
person(string firstname, string lastname)
person(string firstname)
person(string lastname)
第乙個很好,但是其他兩個存在衝突,並且無法解決,因為您無法命名建構函式或引數.
使用靜態工廠方法可以在必要時命名方法:
person of(string firstname, string lastname)
person offirstname(string firstname)
person oflastname(string lastname)
不需要命名時,將使用的通用名稱.仍然可以以過載建構函式的相同方式來過載,例如您可能還具有:
person of(string firstname, string lastname, int age)
儘管工廠方法並不常用,但如果認為必要,工廠方法也可能返回子類.
對於介面,這樣的工廠方法對於例項化實現介面的物件非常方便,而不是將工廠方法放在不同的類中.
在使用介面靜態方法之前,jdk實現了arrays.aslist(…)來建立顯式給定物件的列表.通過將介面靜態方法引入該語言,該方法現在(也)在list介面本身上以list.of(…)的形式實現.
此外,他們還為set.of(…)和map.of(…)新增了便捷方法.
python建立新的物件和建立物件的引用
變數和物件存在記憶體中的不同部分,並通過連線相關聯。變數總是連線到物件,並且絕不會連線到其他變數上,但是更大的物件可能連線到其他的物件 例如乙個列表物件能夠連線到它所包含的物件 python中從變數到物件的連線稱作引用。也就是說,引用是一種關係,以記憶體中的指標的形式實現。具體而言 變數是乙個系統表...
automation不能建立新物件
還沒有解決問題的,請使用以下,我也是今天才偶然摸索到的。請將以下語句複製到記事本中,另存為字尾為.cmd的檔案,並執行。當然在命令列下一句句執行也沒問題。echo 正在修復,這個過程可能需要幾分鐘,請稍候 rundll32.exe advpack.dll delnoderundll32 system...
vs建立dll並使用
前言 學習做個記錄,積小流以望江海。鍵入 pragma once define dll export declspec dllexport extern c dll export int add int a,int b include mydll.h int add int a,int b def ...