繁体   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