簡體   English   中英

在valueOf()和newInstance()之間選擇的標准是什么?

[英]What is the criteria to choose between valueOf() and newInstance()?

假設我有一個ObjectInfo類,其中包含Object name和Object type作為String。(我只是為了提出問題而做點什么。)

class ObjectInfo {
    String objectName;

    String objectType;

    private ObjectInfo(String objectName, String objectType) {
          this.objectName = objectName;
          this.objectType = objectType;
    }
}

如果我想提供一個靜態工廠方法來創建這個類的實例,以下兩種方法中的哪一種更好?為什么?

public static ObjectInfo newInstance(String objectName, String objectType) {
    return new ObjectInfo(objectName, objectType)    
}

public static ObjectInfo valueOf(String objectName, String objectType) {
    return new ObjectInfo(objectName, objectType)    
}

基本上,我想問的是什么時候我們應該使用valueOf()&newInstance()? 程序員社區中是否有任何約定?

-Ankit

沒有官方標准,但這是我的意見,

valueOfacquire意味着您將獲得包含相同信息的任何實例。

newInstancecreate意味着每次都會得到一個不同的實例。

get暗示如果它存在,你將得到一個實例,如果不存在則得到null

在您的情況下, newInstancecreate是合適的。

比照

Integer.valueOf(1) == Integer.valueOf(1) // you get the same object
Integer.valueOf(-200) != Integer.valueOf(-200) // you get a different object.

通常,在java中,當需要某些其他類型數據的字符串表示時,將調用String.valueOf()。 在原始包裝器(Integer,Double)的情況下,valueOf()接受一個String(“12”)並創建該包裝器的實例。

在您的情況下,您嘗試使用許多參數創建新對象。 這是一種工廠方法。 稱之為newInstance更有意義。

你說的時候回答了你自己的問題And If I want to provide a static factory method to creating instances of this class新的Instance在這個上下文中是有意義的(即使valueOf和new都做同樣的事情)。 對我來說,當你想要從現有對象(不一定是整個對象狀態)中檢索一些有意義的狀態信息時,valueOf(顧名思義)是有意義的,因為new的創建全新實例。

 public static ObjectInfo newObjectInfo(String objectName, String objectType)

對於靜態工廠方法,我將使用上面的命名約定。 如果方法使用者想要使用靜態導入,這很有用:

import static foo.ObjectInfo.newObjectInfo;
//....
ObjectInfo info = newObjectInfo(foo, bar);

您可以在Guava API中看到此模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM