Newyorkcity
V2EX  ›  Java

Java8 IDEA 三元表达式总不让写 为啥?

  •  
  •   Newyorkcity · Apr 18, 2020 · 6320 views
    This topic created in 2391 days ago, the information mentioned may be changed or developed.

    a.compareTo(b) > 0 ? return a : return b;

    a.compareTo(b) > 0 ? System.out.println(a) : System.out.println(b);

    这两种为啥不让呢?

            int x,y;
            a.compareTo(b) > 0 ? x=0 : y=0;
    

    但这种是通得过的

    谢谢

    21 replies  •  2020-04-19 16:43:23 +08:00
    heyenyan
    heyenyan
    Apr 18, 2020 via Android
    1
    恶心,自作主张的把不等号都给缩写了
    RtIHZ
    RtIHZ
    Apr 18, 2020❤️1
    2
    return a.compareTo(b) > 0 ? a : b;
    System.out.println(a.compareTo(b) > 0 ? a : b);
    momocraft
    momocraft
    Apr 18, 2020❤️2
    3
    return a 不是 **表達式**
    void 函數同理
    heyenyan
    heyenyan
    Apr 18, 2020 via Android
    4
    三元运算,不是一条语句,
    你可以 int a=你下面的三元运算式;
    wysnylc
    wysnylc
    Apr 18, 2020
    5
    运算需要返回结果,这是个常识和规则
    yhxx
    yhxx
    Apr 18, 2020❤️2
    6
    你可以这样写

    return a.compareTo(b) > 0 ? a : b;
    blu10ph
    blu10ph
    Apr 18, 2020
    7
    不让的原因是没有返回值,return 是返回这个方法,这条语句本身没有返回值.那句能通过是因为 java 赋值语句的返回值等于要赋的值~
    Mistwave
    Mistwave
    Apr 18, 2020 via iPhone❤️1
    8
    你写的“return a”/“sout”是 statement 而不是 expression
    hhhsuan
    hhhsuan
    Apr 18, 2020
    9
    因为 java 设计的不好
    ipwx
    ipwx
    Apr 18, 2020
    10
    void 函数同理可能说法不太好。。。楼主不一定能领会。

    我觉得这么描述,Java 里面 “void” 不是指函数返回值的类型是 “void”,而是函数压根没有返回值。。。

    三元运算符你至少得给它塞个东西吧?
    Perry
    Perry
    Apr 18, 2020 via iPhone
    11
    这是你自己想要的语法糖,和三元没有关系
    brucefu
    brucefu
    Apr 18, 2020❤️1
    12
    三元表达式有返回值的兄嘚
    silymore
    silymore
    Apr 18, 2020 via iPhone
    13
    和 idea 有啥关系
    GPLer
    GPLer
    Apr 18, 2020
    14
    前两种写法 if 不是更好?
    LostPrayers
    LostPrayers
    Apr 18, 2020
    15
    C 家族都这语法,建议楼主重新学习下基础语句、表达式、值之类的基础概念
    itechify
    itechify
    Apr 18, 2020 via Android
    16
    语法错了吧-_-||
    SoloCompany
    SoloCompany
    Apr 18, 2020
    17
    所以 kotlin 有了 Unit 和 Nothing 类型, 并且几乎所有语句块包括 try 都变成了表达式

    但实际上虽然这样的不严谨带来了灵活性, 但也会给代码的可读性带来问题

    java 的严格并不见得就一定不好
    460881773
    460881773
    Apr 18, 2020
    18
    大哥,你的写法错了。 三目运算本身并无问题 也和 idea 无关系
    x1aoYao
    x1aoYao
    Apr 18, 2020
    19
    三元表达式不是这么用的
    最后一种可以只是因为 java 赋值也会有返回值
    Jirajine
    Jirajine
    Apr 18, 2020 via Android
    20
    你先分清 expression 和 statement 的区别,赋值能通过是因为赋值在 C family 的语言里基本上都是 expression 。
    yiyi11
    yiyi11
    Apr 19, 2020
    21
    条件表达式 ? 语句 1 : 语句 2 ×
    条件表达式 ? 表达式 1 : 表达式 2 √
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1304 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 21:12 · PVG 05:12 · LAX 13:12 · JFK 16:12
    ♥ Do have faith in what you're doing.