我有一个抽象的java类“BaseOperation”。此类只有一个抽象方法:
public abstract T execute()
{
...
return T;
}
BaseOperation的子类必须实现此方法:
public class GetUsersOperation extends BaseOperation<GetUsersResponse>
{
...
@Override
public GetUsersResponse execute()
{
...
return GetUsersResponse;
}
}
这是将所有常见的“操作”逻辑放在BaseAction
类中的好方法,但仍然让每个具体子类的执行()
方法都有不同的返回类型。
现在我需要更改此结构以允许执行()方法具有可变数量的参数。例如,一个具体的子类需要:
execute(String, int)
另一个需要:
execute(Date, Date, String)
这很棘手,因为execute方法是在基类中声明的。简单地重载基中的execute方法并不理想。首先,超载的数量将是巨大的。其次,每个子类只会使用其中一个execute方法,其他所有方法的意义是什么?
在我看来,最简单的解决方案是用varargs声明execute方法:
execute(Object... arguments)
然后向下转换子类中的所有参数:
execute(Object... arguments)
{
String s = (String) arguments[0];
...
}
显然,这有两大缺点:
执行()
方法不再是严格类型的,因为任何数量的对象都可以在没有编译器警告的情况下传递。是否有模式或其他解决方案可以没有这些缺点?
如前所述,解决问题的常见方法是使用bean持有参数。但这是另一种基于构建器方法的解决方案:
public interface BaseOperation<T> {
public T execute();
}
public class AddOperation implements BaseOperation<Integer> {
private int a, b;
public void setA(int arg){
a = arg ;
return this;
}
public void setB(int arg){
b = arg;
return this;
}
@Override
public Integer execute() {
return a+b ;
}
}
然后像这样使用它:
new AddOperation().setA(1).setB(2).execute();
您可以通过以下方式混合必需和可选参数:
public class MultipleAddOperation implements BaseOperation<Integer> {
private int sum ;
public MultipleAddOperation(int requiredInt){
sum = requiredInt;
}
public void add(int optionalInt){
sum += optionalInt ;
return this;
}
@Override
public Integer execute(){
return sum;
}
}
所以:
new MultipleAddOperation(5).add(1).add(2).execute();
可以使用包含以下参数的bean:
public interface BaseOperation<T, U> {
T execute(U input);
}
public class GetUsersOperation implements BaseOperation<GetUsersResponse, UserInput> {
@Override
public GetUsersResponse execute(UserInput input) {
Date date = input.getDate();
return new GetUsersResponse(date);
}
}
您的抽象类只有一个抽象方法:最好使用接口。您可以实现多个接口,而您只能扩展一个类。
本文向大家介绍C#变量类型作为参数和返回值,包括了C#变量类型作为参数和返回值的使用技巧和注意事项,需要的朋友参考一下 示例 如果协变量类型显示为输出,则包含类型为协变量。生产Ts的生产者就像生产Ts。 如果逆变类型显示为输出,则包含类型为逆变。产生Ts的消费者就像消费Ts。 如果协变类型作为输入出现,则包含类型是协变的。消费Ts的生产者就像消费Ts。 如果逆变类型显示为输入,则包含类型为协变。消
这个问题与这个问题很接近,但有一个主要区别。 可能的要求: (1) 我想生成一个带有通用返回值的Java函数。 (2)输入参数列表总是相同的。( (3) 函数应知道预期的返回参数类型。 我的尝试: 因为没有生成的实例,所以它不起作用。尝试使用
问题内容: 假设我有一个Helper类,如下所示: 并且是将被设置一次,在构造函数的变量。 不是,因此我可以使用来区分变量和参数。 另一方面,是。在涉及静态变量时,是否有任何方法可以将其与参数区分开? 问题答案: 尽管不建议通过构造函数设置静态变量的值,但可以使用。
我的函数使用一组给定的输入参数(变量)调用Python函数,并返回包含函数输出的元组(变量,因为输出随调用的函数而变化)。 我正在使用C 11通过MinGW-w64编译器的g端口在视窗10机器上编译。我声明了这个模板变量函数(并调用它)如下: 但是,会引发此错误(为了可读性,缩短为):
我为协变返回类型的继承创建了一个小示例。基本上有三种不同的类别: 主应用程序: BaseManager: 鸟经理: 当我重写方法以返回时,为什么我需要将类型转换为? 我使用过的重写方法在返回类型上会有所不同吗?作为参考。 编辑: 我有不同的子模型,它们都继承自。所有模型都允许存在一次。我尝试将这些模型添加到列表中,而不是对每个模型使用单例。使用,我想得到实际的模型。也许我得考虑太多了。
局部变量 仅在代码块或函数中才可见的变量(参考函数章节的局部变量部分)。 环境变量 会影响用户及shell行为的变量。 一般情况下,每一个进程都有自己的“环境”(environment),也就是一组该进程可以访问到的变量。从这个意义上来说,shell表现出与其他进程一样的行为。 每当shell启动时,都会创建出与其环境对应的shell环境变量。改变或增加shell环境变量会使shell更新其自身的