gpt4 book ai didi

java - "new A()"和 "A.newInstance()"有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:24 25 4
gpt4 key购买 nike

什么时候我应该更喜欢一个?下面显示的方法的目的是什么?

class A {
public static A newInstance() {
A a = new A();
return a ;
}
}

有人可以向我解释这两个调用之间的区别吗?

最佳答案

newInstance() 通常用作实例化对象而不直接调用对象的默认构造函数的方法。例如,它经常被用来实现单例设计模式:

public class Singleton {
private static final Singleton instance = null;

// make the class private to prevent direct instantiation.
// this forces clients to call newInstance(), which will
// ensure the class' Singleton property.
private Singleton() { }

public static Singleton newInstance() {
// if instance is null, then instantiate the object by calling
// the default constructor (this is ok since we are calling it from
// within the class)
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

在这种情况下,程序员强制客户端调用newInstance() 来检索类的实例。这很重要,因为简单地提供一个默认构造函数将允许客户端访问该类的多个实例(这违反了 Singleton 属性)。

Fragment 的情况下,提供静态工厂方法 newInstance() 是一种很好的做法,因为我们经常希望将初始化参数添加到新实例化的对象中。我们可以提供一个 newInstance() 方法来为它们执行此操作,而不是让客户端调用默认构造函数并自己手动设置 fragment 参数。例如,

public static MyFragment newInstance(int index) {
MyFragment f = new MyFragment();
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
return f;
}

总的来说,虽然两者之间的差异主要只是设计问题,但这种差异非常重要,因为它提供了另一个抽象级别并使代码更容易理解。

关于java - "new A()"和 "A.newInstance()"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8889240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com