Không, bạn không thể làm điều đó. spec says so.
Toán tử điều kiện có ba biểu thức toán hạng. ? xuất hiện giữa các biểu thức thứ nhất và thứ hai, và: xuất hiện giữa các biểu thức thứ hai và thứ ba là .
Biểu thức đầu tiên phải thuộc loại boolean hoặc Boolean hoặc xảy ra lỗi biên dịch .
Đó là một lỗi thời gian biên dịch cho một trong hai thứ hai hoặc thứ ba toán hạng biểu hiện là một lời khẩn cầu một khoảng trống phương pháp .
[EDIT]
Vì bạn được hỏi về phản ánh, đây là một giải pháp. Tôi không đề xuất điều này. Tôi chỉ đăng nó vì bạn đã hỏi.
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);
}
}
Vào cuối ngày, bạn phải tự hỏi mình nếu không đủ cải thiện khả năng đọc mã của bạn (suy nghĩ cho mỗi vòng lặp). Không có giải pháp nào trong số những giải pháp này cải thiện khả năng đọc mã của IMHO. Nếu tôi là bạn tôi muốn đi với điều này.
if(condition)
a();
else
b();
Tôi thực sự cho bao gồm niềng răng ngay cả khi vòng chỉ chứa một dòng duy nhất, nhưng kể từ khi bạn đang đi sau khi mã sắc nét, đoạn trên nên làm.
Nguồn
2013-04-12 17:09:52
@VenomFangs bạn có thể thay đổi hàm của mình để trả về giá trị không đổi luôn và gán giá trị trả về này cho biến giả. Nhưng nó không có giá trị phức tạp - mã sẽ trông ngu ngốc, tôi sợ. Tốt hơn để làm điều đó như bạn đã biết bạn nên làm. –