为什么有些Java库使用静态newInstance函数而不是构造函数?

Ove*_*erv 3 java android

在为Android开发时,我遇到了一个Bitmap类.我觉得很奇怪,这个类没有公共构造函数,而是提供createBitmap具有完全相同目的的静态函数.

从句法上讲,没有任何优势:

Bitmap bm = new Bitmap(10, 10);
Bitmap bm = Bitmap.createBitmap(10, 10);
Run Code Online (Sandbox Code Playgroud)

我已经看到其他类也这样做,其中通常命名等效的静态函数newInstance.这是什么原因?

Rob*_*vey 6

您所描述的内容称为工厂方法.它之所以存在是因为它提供了获取符合特定接口但可能具有不同底层实现的对象的能力.

对于(一个完全任意且无关紧要的)示例,Factory方法可以选择向您提供LinkedList对象而不是ArrayList对象,因为您指定的初始大小可能在LinkedList中具有性能优势.

但是两个列表实现都符合IList接口,因此生成的对象作为IList返回.