java 私有对象_Java中私有成员对象的Getter

通常的方法是:

>制作防御性副本(例如,返回Wheel副本)

>使轮子不可变(任何时候你想要改变它,你创建一个新的,用新颜色构造)

>不要返回Wheel,返回Wheel上的一个不可变接口,它只暴露getter,没有变异操作

> As Sandeep said,使得setter比getter更受限制,比如,set-private用于setter,public用于getter.然后包中的类可以设置Wheel的颜色,但包外的类不能. (在这种情况下,我更喜欢#3来进行清晰的分离,但是如果你越过能见度边界,这也是有效的.)

第三种选择是使非私有实例变量(字段)通常被认为是不良实践的原因之一.

这里的#3更深入,仅仅因为它比#1和#2更复杂,不是因为它必然更好(不是,设计选择是在上下文中进行的).

一个只读接口,通常是public或package-private,具体取决于您将如何使用所有这些内容:

public interface Wheel {

int getColor();

}

具体类,通常是package-private(如果它是唯一使用的地方,可以是Truck中的私有静态嵌套类):

class WheelImplementation implements Wheel {

private int color;

WheelImplementation(int color) {

this.color = color;

}

public int getColor() {

return this.color;

}

void setColor(int color) {

this.color = color;

}

}

卡车,通常与车轮的能见度相同:

public class Truck {

private WheelImplementation wheel;

Truck(){

this.wheel = new WheelImplementation(/*...initial color...*/);

}

Wheel getWheel() {

return this.wheel;

}

}

当然,这可以通过反思来消除,但通常你设计一个API供使用,而不是滥用. 🙂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值