无赋值的Java三元
有没有一种方法可以在不做赋值的情况下执行java三元操作,或者有没有一种方法可以伪造赋值 我喜欢三元代码在执行一系列if/then/else时的简洁外观 我希望能够基于布尔代数语句调用两个空函数中的一个 比如:无赋值的Java三元,java,ternary-operator,ternary,Java,Ternary Operator,Ternary,有没有一种方法可以在不做赋值的情况下执行java三元操作,或者有没有一种方法可以伪造赋值 我喜欢三元代码在执行一系列if/then/else时的简洁外观 我希望能够基于布尔代数语句调用两个空函数中的一个 比如: (bool1&bool2)?voidFunc1():voidFunc2() 我的函数是返回类型void,因此如果有一种方法可以在赋值中伪造它以使其工作,那么我可以接受……我想看看如何执行:)不,你不能这样做 如果你不喜欢这种风格,你可以选择这种风格 if(bool1 &&
(bool1&bool2)?voidFunc1():voidFunc2()代码>
我的函数是返回类型void
,因此如果有一种方法可以在赋值中伪造它以使其工作,那么我可以接受……我想看看如何执行:)不,你不能这样做
如果你不喜欢这种风格,你可以选择这种风格
if(bool1 && bool2) voidFunc1(); else voidFunc2();
在三值运算符中,操作数必须是非空表达式;也就是说,它们必须产生一些实际值。不,您不能这样做
条件运算符有三个操作数表达式。?出现
在第一个表达式和第二个表达式之间,和:出现在
第二和第三个表达式
第一个表达式的类型必须为boolean或boolean,或
发生编译时错误
这是第二个或第三个操作数的编译时错误
表达式是对void方法的调用
[编辑]
既然你问了关于反思的问题,这里有一个解决方案。我不推荐这个。我之所以发布它,只是因为你问了
public class MyCall
{
public void a(){System.out.println("a");}
public void b(){System.out.println("b");}
public static void main(String... args)
{
new MyCall().go();
}
public void go()
{
Class<? extends MyCall> class1 = this.getClass();
Method aMethod = class1.getMethod("b", null);
Method bMethod = class1.getMethod("a", null);
Object fake = false ? aMethod.invoke(this, null) : bMethod.invoke(this, null);
Object fake2 = true ? aMethod.invoke(this, null) : bMethod.invoke(this, null);
}
}
实际上,我支持,即使循环只包含一行,也要使用大括号,但是因为您要的是清晰的代码,上面的代码段应该可以。如果您真的想使用任何操作,那么有一个技巧。
但这是非常糟糕的代码,仅用于显示语言能力。
我决不建议将此代码投入生产,甚至向您的朋友展示
int dummy = (bool1 && bool2) ? new Object(){
public int hashCode() {
yourFunction1();
// ...
yourFunctionN();
return 0;
};
}.hashCode() : new Object(){
public int hashCode() {
yourAnotherFunction1();
// ...
yourAnotherFunctionN();
return 0;
};
}.hashCode();
有没有一种方法可以在不执行赋值的情况下执行java三元操作,或者有没有一种方法可以伪造赋值
好的,那么当你写这样的语句时:
(bool1 && bool2) ? voidFunc1() : voidFunc2();
SomeType dummy = (bool1 && bool2) ? voidFunc1() : voidFunc2();
代码有两个明显的问题:
条件表达式1的第2个和第3个操作数不能调用void方法。引用:
表达式不是语句,除非它是and赋值表达式、方法调用或对象创建。引用:
事实上,第二个问题是语法错误,我希望任何主流Java编译器都会报告它,而不是第一个问题
(bool1 && bool2) ? voidFunc1() : voidFunc2();
SomeType dummy = (bool1 && bool2) ? voidFunc1() : voidFunc2();
或
其中,gobble
是一个除了“使用”其参数值之外什么都不做的方法
好吧,没有任何上下文可以接受原始表达式
但是,有一些方法可以包装void
函数,以便在条件表达式中调用它们。下面是一种方法:
int dummy = (bool1 && bool2) ?
() -> {voidFunc1(); return 0;} :
() -> {voidFunc2(); return 0;};
1-“条件表达式”是Java语言规范中用于此构造的主要术语。它被称为“三元条件运算符”“在Oracle Java教程中。对中的反射注释有何想法:是否有方法将空反射为空,然后将空分配给对象?使用反射解决方案编辑了我的答案。当然,出于学术目的:)回答了我提出的问题,所以我接受答案。。。我的实际代码将更像TGMCians显示的内联if/then/else代码。:)这个问题早就得到了回答,但我有一个想法。(注:我不是职业选手)。如果他让那些空函数返回一个整数呢。说-1。然后他运行int fake=bool?方法1:方法2
它们都返回-1,但所需的代码仍在运行。我使用这个,还没有遇到任何问题。我喜欢这个演示。。。如果没有人能给我一个方法,我会接受这个答案。例如,通过从空到空的反射。。。等等。您可以更改函数以始终返回常量值,并将此返回值指定给伪变量。但这不值得这么麻烦——恐怕代码看起来很愚蠢。最好像你已经知道的那样去做。