怎么解决这个
如何改变代码以获得相同的结果
public class myClass
{
List<Drawable> d;
List<Bitmap> b;
public myClass(Integer[] resIDsList)
{
...
}
public myClass(List<? extends Drawable> drawableList) // error occure here
{
d = drawableList;
}
public myClass(List<? extends Bitmap> bitmapList) // and here too
{
b = bitmapList;
}
}
Run Code Online (Sandbox Code Playgroud)
如果构造函数在上面相同?
定义静态工厂方法,并将构造函数设为私有:
static myClass fromDrawables(List<? extends Drawable> list) {
return new myClass(list, null);
}
static myClass fromBitmaps(List<? extends Bitmap> list) {
return new myClass(null, list);
}
private myClass(List<? extends Drawable> drawables, List<? extends Bitmap> bitmaps) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
(您可能希望为该myClass(Integer[])案例添加另一个工厂方法;但我希望您了解如何为此扩展上述代码).
现在您将调用工厂方法,而不是构造函数:
// Not new myClass(...)
myClass a = myClass.fromDrawables(drawablesList);
myClass b = myClass.fromBitmaps(bitmapsList);
Run Code Online (Sandbox Code Playgroud)
我建议阅读Effective Java 2nd Ed第1项:"考虑静态工厂方法而不是构造函数",以深入讨论这种方法.