greatHair
V2EX  ›  Java

有没有 V 友能解惑呀,为什么不能新建对象的同时给它的属性赋值。

  •  
  •   greatHair · Dec 17, 2020 · 2505 views
    This topic created in 1997 days ago, the information mentioned may be changed or developed.

    写代码的时候突发奇想的在新建对象的同时给它的属性赋值。

    例如:

    正常写法: Brand brand = new Brand();

    brand.setId(1);

    我的错误写法: Brand brand = new Brand().setId(1);//这样写会报错。

    new Brand().setId(1);//这样不会报错,但是没有办法调用对象去 getId()

    朋友的解释是:

    new 出来的对象( B )都存放于堆中,而实例化的对象( A )在栈里。 正常写法调用方法( C )的顺序 是 A->B->C

    错误的写法里,直接 B->C,然后并不能再反过来,将 B 指向 A 。 (B->C)->A

    18 replies    2021-02-07 15:57:50 +08:00
    codehz
        1
    codehz  
       Dec 17, 2020 via Android
    (问题不是在 setId 没返回 this 上吗(
    gotonull
        2
    gotonull  
       Dec 17, 2020
    Lombok 不就能解决这问题吗
    l48x4264l46
        3
    l48x4264l46  
       Dec 17, 2020
    new Brand() 返回的是当前实例,所以可以调用 setId 方法。而 setId 放回是 void,与 Brand brand 不符。所以不能用。试试使用建造者模式去创建对象。就可以实现你所想要的结果了。
    chendy
        4
    chendy  
       Dec 17, 2020   ❤️ 1
    因为你的 setId 返回的不是 Brand…(猜测是 void
    ingxx
        5
    ingxx  
       Dec 17, 2020
    set 方法返回 this 就行了,@accessors 或者 @Builder
    lovelive1024
        6
    lovelive1024  
       Dec 17, 2020
    你那么写相当于把 setid 方法的返回值赋值给 brand 对象,但是 setid 方法没有返回值,所以就报错了

    如果 setid 这么定义就可以像你那么写,但是这样不符合规范
    public Brand setId(Long id){
    this.id = id;
    return this;
    }
    nekochyan
        7
    nekochyan  
       Dec 17, 2020
    你自己想想你 setId 返回的是什么
    wysnylc
        8
    wysnylc  
       Dec 17, 2020
    百度 链式
    hoyixi
        9
    hoyixi  
       Dec 17, 2020
    报错,报的啥错,你不看一眼吗
    greatHair
        10
    greatHair  
    OP
       Dec 17, 2020
    谢谢大家,我明白了,大师,我悟了。(我有点蠢
    anansi
        11
    anansi  
       Dec 17, 2020
    这个也太弱智了吧,什么堆啊栈啊的
    Vegetable
        12
    Vegetable  
       Dec 17, 2020
    有点好笑,因为 setId 返回的不是 Brand,如果是 js 之类的,还得(new Brand()).setId 明确你 new 的是谁才行。
    Vegetable
        13
    Vegetable  
       Dec 17, 2020
    @Vegetable 哦不用括号,弄混了
    dcalsky
        14
    dcalsky  
       Dec 17, 2020
    你朋友一听就是老八股文大师了。
    zhuweiyou
        15
    zhuweiyou  
       Dec 17, 2020   ❤️ 1
    写个带参构造函数不行么
    syozzz
        16
    syozzz  
       Dec 17, 2020
    。。。
    SkyLine7
        17
    SkyLine7  
       Dec 23, 2020
    3 楼正解
    KarmaWu
        18
    KarmaWu  
       Feb 7, 2021
    写个带参构造函数、或者 Lombok @Builder 不香么?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   993 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 18:53 · PVG 02:53 · LAX 11:53 · JFK 14:53
    ♥ Do have faith in what you're doing.