Java设置占位符或变量方法
我知道类似的东西在Python和其他语言中是可能的,但我想看看在Java中是否有一些基本的东西我忽略了,或者如果语言没有设置成这样,基本上我希望有一个if/then或开关,目前如下所示:Java设置占位符或变量方法,java,methods,simplify,Java,Methods,Simplify,我知道类似的东西在Python和其他语言中是可能的,但我想看看在Java中是否有一些基本的东西我忽略了,或者如果语言没有设置成这样,基本上我希望有一个if/then或开关,目前如下所示: if X { fillRect(<bunch of variables>); } else drawRect(<bunch of variables>); 如果X{ fillRect(); }否则 drawRect(); 相反,我想做以下的事情,这在其他语言中是可能的,imho更优雅
if X {
fillRect(<bunch of variables>);
} else
drawRect(<bunch of variables>);
如果X{
fillRect();
}否则
drawRect();
相反,我想做以下的事情,这在其他语言中是可能的,imho更优雅,因为不需要重复一个简单的选择
if X{
funct = fillRect;
} else funct=drawRect;
funct(<bunch of variables>);
如果X{
funct=fillRect;
}else funct=drawRect;
funct();
难道没有一个简单的方法可以做到这一点吗?
谢谢。是的,这在Java中是绝对可能的。您只需要一个接口来定义可以分配并随后调用的“函数” 例如:
@FunctionalInterface
interface Operation {
int operate(int arg1, int arg2);
}
Operation operation;
if (X)
operation = (a1, a2) -> a1 + a2;
else
operation = (a1, a2) -> a1 - a2;
int result = operation.operate(1, 2);
我使用了lambda函数来定义操作,但它们也可以很容易地成为方法引用
Java在
Java.base
模块的Java.util.function
包中还附带了大量标准接口,因此您通常不需要定义接口。我的示例中的一个可以替换为binarymoperator
是的,这在Java中是绝对可能的。您只需要一个接口来定义可以分配并随后调用的“函数”
例如:
@FunctionalInterface
interface Operation {
int operate(int arg1, int arg2);
}
Operation operation;
if (X)
operation = (a1, a2) -> a1 + a2;
else
operation = (a1, a2) -> a1 - a2;
int result = operation.operate(1, 2);
我使用了lambda函数来定义操作,但它们也可以很容易地成为方法引用
Java在
Java.base
模块的Java.util.function
包中还附带了大量标准接口,因此您通常不需要定义接口。我的示例中的一个可以替换为binarymoperator
您可能正在寻找使用者
接口。使用者只接受一个变量,默认情况下,他们没有4个变量的使用者,但我想我明白了。你可能正在寻找使用者
接口。使用者只接受一个变量,默认情况下,他们没有4个变量的使用者,但我想我明白了。是否有一个通用函数接口,用于合理数量的操作数?这样我基本上可以有:如果(X){operation=(a,b,c)->fillRect(a,b,c);}如果有一个默认的泛型接口刚刚从操作正在克隆的方法中获取了a,b,c的类型,那么以这种方式编码会更容易,但是,让它像这样灵活,确实可以考虑一些更具体的情况。@Procerapientie一些额外的库,如Vavr,确实有带有任意数量参数的接口(如Function4(T,U,W,X)
),但到目前为止,使用合理的名称创建自己的接口通常是有意义的。@procerapientie我建议您定义一个接口。这将使未来的读者比使用通用界面更好地理解您在做什么。关于“从方法中获取a、b、c的类型”,有很多方法可以做到这一点,但请记住Java是一种强类型语言。它的设计(无论好坏)都是为了迫使编码人员考虑每个变量的类型。如果您想要松散类型或隐含类型,这不是您可以选择的语言。是否有一个通用的函数接口来支持合理数量的操作数?这样我基本上可以有:如果(X){operation=(a,b,c)->fillRect(a,b,c);}如果有一个默认的泛型接口刚刚从操作正在克隆的方法中获取了a,b,c的类型,那么以这种方式编码会更容易,但是,让它像这样灵活,确实可以考虑一些更具体的情况。@Procerapientie一些额外的库,如Vavr,确实有带有任意数量参数的接口(如Function4(T,U,W,X)
),但到目前为止,使用合理的名称创建自己的接口通常是有意义的。@procerapientie我建议您定义一个接口。这将使未来的读者比使用通用界面更好地理解您在做什么。关于“从方法中获取a、b、c的类型”,有很多方法可以做到这一点,但请记住Java是一种强类型语言。它的设计(无论好坏)都是为了迫使编码人员考虑每个变量的类型。如果你想要松散的或隐含的类型,这不是你可以选择的语言。