跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 有没有 V 友能解惑呀,为什么不能新建对象的同时给它的属性赋值。
未分類
29 12 月 2020

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

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

資深大佬 : greatHair 8

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

例如:

正常写法: 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

大佬有話說 (16)

  • 資深大佬 : codehz

    (问题不是在 setId 没返回 this 上吗(

  • 資深大佬 : gotonull

    Lombok 不就能解决这问题吗

  • 資深大佬 : l48x4264l46

    new Brand() 返回的是当前实例,所以可以调用 setId 方法。而 setId 放回是 void,与 Brand brand 不符。所以不能用。试试使用建造者模式去创建对象。就可以实现你所想要的结果了。

  • 資深大佬 : chendy

    因为你的 setId 返回的不是 Brand…(猜测是 void

  • 資深大佬 : ingxx

    set 方法返回 this 就行了,@accessors 或者 @Builder

  • 資深大佬 : ily433664

    你那么写相当于把 setid 方法的返回值赋值给 brand 对象,但是 setid 方法没有返回值,所以就报错了

    如果 setid 这么定义就可以像你那么写,但是这样不符合规范
    public Brand setId(Long id){
    this.id = id;
    return this;
    }

  • 資深大佬 : nekochyan

    你自己想想你 setId 返回的是什么

  • 資深大佬 : wysnylc

    百度 链式

  • 資深大佬 : hoyixi

    报错,报的啥错,你不看一眼吗

  • 主 資深大佬 : greatHair

    谢谢大家,我明白了,大师,我悟了。(我有点蠢

  • 資深大佬 : anansi

    这个也太弱智了吧,什么堆啊栈啊的

  • 資深大佬 : Vegetable

    有点好笑,因为 setId 返回的不是 Brand,如果是 js 之类的,还得(new Brand()).setId 明确你 new 的是谁才行。

  • 資深大佬 : Vegetable

    @Vegetable 哦不用括号,弄混了

  • 資深大佬 : dcalsky

    你朋友一听就是老八股文大师了。

  • 資深大佬 : zhuweiyou

    写个带参构造函数不行么

  • 資深大佬 : syozzz

    。。。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具