V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Newyorkcity
V2EX  ›  Java

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

  •  
  •   Newyorkcity · Apr 18, 2020 · 5858 views
    This topic created in 2209 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
        1
    heyenyan  
       Apr 18, 2020 via Android
    恶心,自作主张的把不等号都给缩写了
    RtIHZ
        2
    RtIHZ  
       Apr 18, 2020   ❤️ 1
    return a.compareTo(b) > 0 ? a : b;
    System.out.println(a.compareTo(b) > 0 ? a : b);
    momocraft
        3
    momocraft  
       Apr 18, 2020   ❤️ 2
    return a 不是 **表達式**
    void 函數同理
    heyenyan
        4
    heyenyan  
       Apr 18, 2020 via Android
    三元运算,不是一条语句,
    你可以 int a=你下面的三元运算式;
    wysnylc
        5
    wysnylc  
       Apr 18, 2020
    运算需要返回结果,这是个常识和规则
    yhxx
        6
    yhxx  
       Apr 18, 2020   ❤️ 2
    你可以这样写

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

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

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

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

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