我的代码如下:
public static final Condition.ActionCondition ACTION_CONDITION_ACTIVATE = new Condition.ActionCondition(ACTION_CONDITION_ACTIVATE_ID, "Activate")
{
private static final long serialVersionUID = 5660276607942658334L;
@Override
public Object action(Object... params)
{
return null;
}
};
扩展了我的类条件。这些类的唯一区别是上面的抽象方法“action”。常规条件(它扩展的类)没有任何操作,但是存储在Conditions类的ArrayList中,但可能不在这一点上。
ActionConditions背后的想法是他们有一个Integer,代表他们的条件,在这种情况下是ACTION_CONDITION_ACTIVATE_ID,一个名字,在本例中是“Activate”,最后是一个做某事的方法。该方法可以返回任何内容,执行任何需要的操作,并将任何内容作为其参数。
我可以想到这个类的多种不同用法,但是用action方法编写它的方式,只是因为某些原因而错误地使用了我。有没有更好的方法来完成这门课程的作用?或者课程写得不够好?
答案 0 :(得分:2)
当然,这是一个意见问题,但由于这是一个编码风格问题,我认为发表意见是可以的。
编写一个可以接受任何参数并返回任何所需参数的方法,可以避免使用像Java这样的类型安全语言获得的大量内容。我敢打赌,除了编写一个采用任意数量的Object
参数并返回Object
的方法之外,几乎可以肯定有更好的方法来实现您的最终目标。
如果不了解您需要对此类课程做些什么,我很难提出建议,但我觉得使用generics可能会对您有所帮助。该对象的实例化器还可以提供所需的类型参数来确定操作方法接受和返回的内容,而不是只传递一个动作ID来确定该类将执行的操作。
按照上面的代码,匿名类使用看起来像这样:
public static final Condition.ActionCondition<MyReturnType,MyParamType1,MyParamType2> ACTION_CONDITION_ACTIVATE = new Condition.ActionCondition<MyReturnType,MyParamType1,MyParamType2>(ACTION_CONDITION_ACTIVATE_ID, "Activate")
{
private static final long serialVersionUID = 5660276607942658334L;
@Override
public MyReturnType action(MyParamType1 param1, MyParamType1 param2)
{
return null;
}
};
这假定在Condition
类中声明的ActionCondition的抽象类是这样的:
public static abstract class Condition.ActionCondition<R,P1,P2> extends Condition{
public abstract R action(P1 param1,P2 param2);
}
这假设你希望动作总是接受不超过2个参数。您可以看到如何将其推广到任意选择的最大参数数量。
注意:根据您的描述,听起来您将匿名类用法描述为抽象类的声明。这可能只是一个轻微的错误措辞,但这与你的一些典型结构相结合,让我想知道你是否可能对抽象和/或匿名课程没有很好的理解。如果我上面的解释对您有意义,您可能想尝试阅读Nested Classes,abstract classes和anonymous classes
之间的差异