从不使用构造函数

时间:2017-03-03 11:07:19

标签: java android

有一些问题。

我有一个父类

abstract class Tetramino{}

和一些使用显式列出的默认构造函数扩展父类的子类

class LineHorizontal extends Tetramino
{
  LineHorizontal() { // do some}
}

class LineVertical extends Tetramino
{
  LineVertical () {// do some}
}

我有一个生成子类的生成器类

class MinoGenerator
{
    private static final String TAG = "MinoGenerator";

    private static final Class[] types = {LineHorizontal.class,     LineVertical.class, Square.class,
        L0.class, L90.class, L180.class, L270.class, LR0.class, LR90.class, LR180.class,
        LR270.class, T0.class, T90.class, T180.class, T270.class, Z0.class,
        Z180.class, RZ0.class, RZ180.class};

    static Tetramino next()
    {
        try{
           int type = (int) (Math.random() * types.length);
           return (Tetramino) types[type].newInstance();
       } catch (Exception e){
          e.printStackTrace();
          Log.e(TAG, "Error while creating new tetramino");
      }
      return null;
    }
}

当我想要创建新的时,我会调用next()。 然后newInstance()函数调用consturtors隐式并返回一个随机的。 但android studio标记了一个警告“Constructor neve used”的构造函数,我该如何修复呢? 谢谢你的答复。

2 个答案:

答案 0 :(得分:1)

尝试添加@SuppressWarnings("unused")悬停您的课程

像:

@SuppressWarnings("unused")
class MyClass{

    public MyClass(){}
}

这适用于IntelliJ IDEA,我认为它也适用于Android Studio

答案 1 :(得分:0)

假设您正在使用Jack,更好的方法是使用lambda表达式:

private static final List<Supplier<? extends Tetramino>> types =
    Collections.unmodifiableList(
        Arrays.asList(
            LineHorizontal::new,  // or () -> new LineHorizontal()
            LineVertical::new,
            // etc, for other types
            ));

然后,在您的next()方法中:

return types[type].get();

请注意,这实际上是使用了类的构造函数,因此您不再拥有未使用的警告。而且它比反射更安全。