有没有做一个java三元操作没有做任务或方式伪造assingment的方法?爪哇三元没有分配
我喜欢简洁的三元代码在做一堆if/then/elses时的外观。
我希望能够基于布尔代数语句调用两个void函数之一。
喜欢的东西:
(bool1 && bool2) ? voidFunc1() : voidFunc2();
我的函数的返回类型void
的,所以如果有一种方法来伪造这个在分配中,使其工作,然后我的“M处之泰然..我想看看如何做到这一点虽然:)
有没有做一个java三元操作没有做任务或方式伪造assingment的方法?爪哇三元没有分配
我喜欢简洁的三元代码在做一堆if/then/elses时的外观。
我希望能够基于布尔代数语句调用两个void函数之一。
喜欢的东西:
(bool1 && bool2) ? voidFunc1() : voidFunc2();
我的函数的返回类型void
的,所以如果有一种方法来伪造这个在分配中,使其工作,然后我的“M处之泰然..我想看看如何做到这一点虽然:)
不,你不能那样做。 spec says so。
条件运算符有三个操作数表达式。 ?在第一个和第二个表达式之间出现 ,并且:在第二个和第三个表达式之间出现 。
第一个表达式必须是布尔类型或布尔类型,否则会发生编译时错误。
它是第二或第三操作数 表达成为一个空隙方法的调用一个编译时间错误。
[编辑]
既然你问了一下反思,这里有一个解决方案。我不推荐这个。我只是因为你提问才发布它。
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);
}
}
在你要问自己,如果是succint提高代码的可读性一天结束(想想for-each循环)。这些解决方案都没有改善代码的可读性恕我直言。如果我是你,我宁愿去这个。
if(condition)
a();
else
b();
我其实我为甚至包括当环路仅包含一行牙套,但因为你是清脆的代码后去,在上面的代码段应该做的。
任何想法的反思评论在:http://stackoverflow.com/questions/4830843/in-java-is-it-possible-to-cast-to-void -not-void –
有没有办法让void反映为null,然后将null分配给一个对象? –
用反思性解决方案编辑我的答案。对于学术目的当然:) –
不,你不能做到这一点是这样的。
你可以喜欢这种风格,如果不喜欢使其更语句。
if(bool1 && bool2) voidFunc1(); else voidFunc2();
在三元运算符中,操作数必须是非空的表达式;即它们必须产生一些实际价值。
我喜欢这个演示文稿......如果没有人能告诉我一个办法,我会接受这个答案。例如。通过虚空的反映为空...等 –
如果你真的想要使用ternany操作,那么有一个黑客攻击。 但这是非常糟糕的代码,仅用于显示语言的能力。 我永远不会推荐将此代码投入生产或甚至向朋友展示。
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三元操作而不做转让或方法来伪造分配?
OK,所以,当你写这样的语句:
(bool1 && bool2) ? voidFunc1() : voidFunc2();
有两个不同的问题与代码:
事实上,这些问题的第二个是语法错误和我期望的任何主流的Java编译器,以报告的第一个问题吧。
SomeType dummy = (bool1 && bool2) ? voidFunc1() : voidFunc2();
或
gobble((bool1 && bool2) ? voidFunc1() : voidFunc2());
其中gobble
是什么也不做......除了一个方法“消费”,其参数的值:如果你做了这样的事情的第一个问题只透露自己。
AFAIK,没有可以接受原始表达式的上下文。
1 - “条件式”是用于该构建体在Java语言规范的主要术语。它在Oracle Java教程中被称为“三元条件运算符”。
@VenomFangs你可以改变你的函数总是返回一个常量值,并将这个返回值赋给一个虚拟变量。但是这不值得 - 麻烦 - 代码看起来很愚蠢,恐怕。更好地做到这一点,因为你已经知道你应该这样做。 –