有沒有做一個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你可以改變你的函數總是返回一個常量值,並將這個返回值賦給一個虛擬變量。但是這不值得 - 麻煩 - 代碼看起來很愚蠢,恐怕。更好地做到這一點,因爲你已經知道你應該這樣做。 –