Java 对象里为什么要用 get set?

2022-08-11 08:50:23 +08:00
 dxatgp02

int max = obj.getMax();

int max = obj.max;

第二种写法不是更简单,更好理解?

17466 次点击
所在节点    Java
185 条回复
CodeCodeStudy
2022-08-11 09:09:23 +08:00
Java 的成员变量没有多态
nothingistrue
2022-08-11 09:10:19 +08:00
@dxatgp02 #3 先把 public 、private 、protectce 、default/friend 这几个可见范围搞清楚再说。max 声明称 public ,就可以用你的第二种写法。只不过 public 的字段,要比繁琐的 getter/setter 不便处更大。
Macolor21
2022-08-11 09:10:45 +08:00
@zed1018 张嘴就来,record 可不可变啊?普通对象可不可变的啊?不可变的对象随便你怎么 public ,怎么访问成员变量,都没问题,它是 final

不要管中窥豹,井底之蛙,如果你是写 Java ,只能说你面向对象的思想都没理解。如果你不是,那只能说你工程化能力挺差
cmdOptionKana
2022-08-11 09:12:01 +08:00
@noe132 真相了,最根本的原因就是设计语言时没考虑周到,后来只能用方法来模拟。
yolee599
2022-08-11 09:12:27 +08:00
java 没有 getter/setter 只能这样做,去看看 C# 的 getter/setter 就感觉很优雅。
wanguorui123
2022-08-11 09:13:28 +08:00
设计问题,就和 JAVA 泛型一样,难用
nba2k9
2022-08-11 09:15:22 +08:00
这边建议您重新设计门语言呢
CodeCodeStudy
2022-08-11 09:16:45 +08:00
class Person {
protected String name = "匿名";
public String toString() {
return name;
}
}

class Zhangsan extends Person {
protected String name = "张三";
}

Person zhangsan = new Zhangsan();
System.out.println(zhangsan);

比如这个例子,想重写 name 是达不到目的的,必须要重写 toString()
zed1018
2022-08-11 09:17:40 +08:00
@Macolor21 笑死,你写 getter setter 不也是能让对象 mutable ,都是 mutable ,我为啥一定要 setter ,脱裤子放屁吗?有多少人写的对象没有 setter ?有多少 javaer 写 allargs ?可真就是张口就来呢。
dxatgp02
2022-08-11 09:19:12 +08:00
说用 set get 补权限这种说法不感觉很怪吗?这是设计时的问题
同样的对象 public int mx; 和一个有 get set 的对象;
通过入参传到 A.class 里 只能 get 不能 set
传过入参传到 B.class 里 就又能 get 又能 set
yaphets666
2022-08-11 09:19:56 +08:00
见人说人话,见鬼说鬼话。每个语言有自己的套路
beisilu
2022-08-11 09:21:31 +08:00
所以有人说一下 c#的 getter ,setter 是啥样的吗
cslive
2022-08-11 09:28:22 +08:00
那个只是规范,你不遵守也行,不会影响你写程序
djoiwhud
2022-08-11 09:29:05 +08:00
我个人怀疑最主要的原因是以前没有很强的引用查找。直接访问变量的地方太多,调整的时候,改起来麻烦。

c#的 get,set 一样的冗余。现在写 c#的游戏开发者似乎很少这么写。
tulongtou
2022-08-11 09:29:47 +08:00
@dxatgp02 没错,就是这样
cheng6563
2022-08-11 09:31:21 +08:00
就是教条主义,只是一开始这样随便定了下,然后一些官方库都用 get/set 了,然后第三方库都改成读写 get/set 而不是读写 field 了,然后后面的代码也必须用 get/set 了。
dqzcwxb
2022-08-11 09:31:57 +08:00
我不理解==教条主义
iseki
2022-08-11 09:33:07 +08:00
用 Kotlin 吧,简单来说就是语言没有 property ,但是实际发现没 property 不行,就搞出来了手动 property 的 getter setter
lyxeno
2022-08-11 09:33:32 +08:00
用的最多的控制部分字段只读..只写 get 不写 set 方法,有些 bean 字段很多,get set 方法就显得又臭又长了。还好有 lombok
frank1256
2022-08-11 09:35:18 +08:00
@dxatgp02 作用域,你写的自己的业务代码,没有问题。如果你是 spring 这样的开源框架,你就要控制好属性的作用域,例如 spring 提供给了你一个类,只给你构造方法可以修改属性,不提供 get ,set 。这样你是没有权限去改他的属性的,限制你的操作,更多的是防止人为操作导致报错。其次是,赋值属性的时候,经常需要校验参数的。如果写成 public ,就没有这些限制了。当然有些简单场景写 public 也没问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/872064

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX