有一些问题。
我有一个父类
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”的构造函数,我该如何修复呢? 谢谢你的答复。
答案 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();
请注意,这实际上是使用了类的构造函数,因此您不再拥有未使用的警告。而且它比反射更安全。