如何在Java中用相同的参数创建多个构造函数

Ali*_*eri 0 java

怎么解决这个

如何改变代码以获得相同的结果

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)

如果构造函数在上面相同?

And*_*ner 5

定义静态工厂方法,并将构造函数设为私有:

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项:"考虑静态工厂方法而不是构造函数",以深入讨论这种方法.