Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java设置占位符或变量方法_Java_Methods_Simplify - Fatal编程技术网

Java设置占位符或变量方法

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更优雅

我知道类似的东西在Python和其他语言中是可能的,但我想看看在Java中是否有一些基本的东西我忽略了,或者如果语言没有设置成这样,基本上我希望有一个if/then或开关,目前如下所示:

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是一种强类型语言。它的设计(无论好坏)都是为了迫使编码人员考虑每个变量的类型。如果你想要松散的或隐含的类型,这不是你可以选择的语言。