写代码的时候突发奇想的在新建对象的同时给它的属性赋值。
例如:
正常写法: 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
1
codehz 2020-12-17 17:53:45 +08:00 via Android
(问题不是在 setId 没返回 this 上吗(
|
2
gotonull 2020-12-17 17:56:33 +08:00
Lombok 不就能解决这问题吗
|
3
l48x4264l46 2020-12-17 17:57:52 +08:00
new Brand() 返回的是当前实例,所以可以调用 setId 方法。而 setId 放回是 void,与 Brand brand 不符。所以不能用。试试使用建造者模式去创建对象。就可以实现你所想要的结果了。
|
4
chendy 2020-12-17 17:59:04 +08:00 1
因为你的 setId 返回的不是 Brand…(猜测是 void
|
6
ily433664 2020-12-17 18:01:29 +08:00
你那么写相当于把 setid 方法的返回值赋值给 brand 对象,但是 setid 方法没有返回值,所以就报错了
如果 setid 这么定义就可以像你那么写,但是这样不符合规范 public Brand setId(Long id){ this.id = id; return this; } |
7
nekochyan 2020-12-17 18:03:03 +08:00
你自己想想你 setId 返回的是什么
|
8
wysnylc 2020-12-17 18:03:30 +08:00
百度 链式
|
9
hoyixi 2020-12-17 18:04:03 +08:00
报错,报的啥错,你不看一眼吗
|
10
greatHair OP 谢谢大家,我明白了,大师,我悟了。(我有点蠢
|
11
anansi 2020-12-17 18:07:48 +08:00
这个也太弱智了吧,什么堆啊栈啊的
|
12
Vegetable 2020-12-17 18:08:05 +08:00
有点好笑,因为 setId 返回的不是 Brand,如果是 js 之类的,还得(new Brand()).setId 明确你 new 的是谁才行。
|
14
dcalsky 2020-12-17 18:09:30 +08:00
你朋友一听就是老八股文大师了。
|
15
zhuweiyou 2020-12-17 18:09:32 +08:00 1
写个带参构造函数不行么
|
16
syozzz 2020-12-17 18:33:05 +08:00
。。。
|
17
SkyLine7 2020-12-23 15:08:38 +08:00
3 楼正解
|