安卓这个私有方法在这个单例Java类中做什么?
我有一个singleton类,功能非常好。我现在只是想知道最后一种方法是什么
public class PicassoSingleton {
private static Picasso instance;
public static Picasso with(Context context) {
if (instance == null) {
instance = new Picasso.Builder(context.getApplicationContext()).debugging(true).downloader(new ImageDownloader(context)).build();
}
return instance;
}
private PicassoSingleton() {
throw new AssertionError("No instances.");
}
}
有人知道它的用途吗
# 1 楼答案
PicassoSingleton
在这里是一个构造函数,通过将其私有化,可以限制其他类实例化它这使得构造函数对其他类不可用,并且只能通过getInstance方法访问该类的实例
# 2 楼答案
构造函数是私有的,因此不能使用new关键字创建类的新实例
# 3 楼答案
通常,让构造函数
private
来防止其他类实例化PicassoSingleton
就足够了在私有构造函数中抛出异常似乎是一种偏执编程,因为类的实现者知道它的内部细节,并且必须知道自己在做什么
但有一个原因是有道理的。在构造函数中抛出异常也将阻止其他人使用反射来实例化类的对象
这是不可能的
# 4 楼答案
这是
PicassoSingleton
类的构造函数。它是私有的,以确保你不能从其他代码调用它。相反,您可以使用with
方法来获取该类的单例实例# 5 楼答案
它防止类被实例化,如果没有指定构造函数,那么默认情况下,所有类都可以使用
new PicassoSingleton()
创建一个新实例,而不带任何参数如果指定构造函数并使其
private
,则只有类本身可以创建自身的实例。如果随后在构造函数中抛出异常,则即使该类也无法实例化自身,并且它会阻止使用反射的人这样做这样做本质上意味着该类可以提供静态方法、变量等,但永远不能用作对象(除非您提供另一个构造函数,在这种情况下,该构造函数的访问级别可能允许使用它)
# 6 楼答案
除了Tim B答案之外,我想说的是,不仅要防止这个类被用作对象,还要防止其他类扩展它
无论您如何不必在构造函数中抛出异常,您都可以将其留空,这样做的唯一原因是保护您自己