我有一个对象,它有一堆公共属性,没有getter和setters。坏! 所以我创建了一个具有属性的类并为它们创建了getter和setter。我的计划是将对象包装在我的课程中,这意味着不能直接访问属性。 我有点不确定如何做到这一点。我明白投球很好。 我该如何将我的安全类与getter和setter打包并通过getters和setter访问属性?环绕一个对象
Q
环绕一个对象
3
A
回答
6
也许这样?
class MyCar implements ICar{
private final Car car;
public MyCar(Car car)
{
this.car = car;
}
public string getModel()
{
return car.model;
}
public void setModel(string value)
{
car.model = value;
}
}
现在不是身边掠过的Car
一个实例,您可以绕过MyCar
实例,它具有getter和setter或ICar
的参考,这将让你控制你想暴露什么(比如你可能只是暴露了吸气剂)。
+0
包装和封装有什么区别? – Lealo 2017-10-05 01:23:34
3
使用组合物。如果你与公共财产类别称为暴露,只要做
public class ExposedProtector {
private Exposed exposed; // private means it can't be accessed directly from its container
//public/protected methods here to proxy the access to the exposed.
}
请注意,没有什么会阻止其他人创建实例的暴露。如果可能的话,您将不得不修改实际暴露的类本身,这可能是更好的方法。
你应该看看java访问修饰符。从私人到受保护的公共场所都有不同的访问级别。
2
如果您希望您的类与原始类(即客户端代码不需要更改变量类型)进行插件兼容,那么您的类必须是客户端代码期望的类的子类。在这种情况下,虽然可以轻松添加getter和setter,但无法隐藏公共变量。但是,即使你继承了子类,如果原始类还有其他子类,这也无济于事。他们不会看到那些获得者和制定者。
如果可以引入一个无关类,那么解决的办法是委托一切:
public class BetterThing {
private Thing thing;
public BetterThing(Thing thing) {
this.thing = thing;
}
public int getIntProperty1() {
return thing.property1;
}
public void setIntProperty1(int value) {
thing.property1 = value;
}
// etc.
}
相关问题
- 1. TCPDF围绕对象环绕文本
- 2. 围绕文字环绕一个div
- 3. JavaFX:如何停止环绕TextFLow对象
- 4. 如何让对象环绕屏幕?
- 5. 围绕一个中心对象旋转对象
- 6. 围绕3D对象环绕图像以便于2D打印
- 7. 围绕一个对象在javascript中围绕一个3d摄像机
- 8. 使一个div环绕另一个div
- 9. webgl在一个坐标轴上围绕另一个对象旋转对象
- 10. 旋转围绕fabric.js另一个对象的另一个独立的对象
- 11. PHP:循环一个对象
- 12. 一对在Firefox上环绕的div
- 13. 循环通过一个对象,并在另一个对象
- 14. 通过一个对象创建一个新对象的循环
- 15. AngularJS循环一个对象来构建一个对象数组
- 16. 围绕鼠标旋转多个对象
- 17. 移一个阵列元件环绕
- 18. 文字环绕一个div在HTML
- 19. 文字环绕一个长词
- 20. While循环在PHP后绕一个值
- 21. 的getchar()函数绕过一个循环
- 22. 围绕滚动窗格环绕一个按钮
- 23. 围绕一个独特的backbone.js集合环绕我的头
- 24. 将玩家对象围绕玩家对象移动一个光滑的圆圈
- 25. 绕过游戏对象
- 26. 对象不绕枢轴点
- 27. Flash CS5一次移动一个对象1次围绕一个角度
- 28. JS循环通过一个json对象
- 29. 循环一个对象(stdClass)#1
- 30. 使用for..in循环一个对象
不能你只是扔掉有很多公共属性的对象,并使用你的类私有属性和getters/setters(即Java bean)?没有包装。 – MarcoS 2011-05-26 12:56:35
简单的方法为您正在接收的对象创建一个引用类型变量,并使getter和setter成为genrate。先进的方式使用反射api或dyna豆先进的方式是非常复杂的,不建议使用时,你可以用简单的方式执行的东西 – Mateen 2015-01-08 08:38:46