在Eclipse中生成setter和getter时,其中一个选项是使用类中的getter和setter而不是直接访问类成员.这种级别的内部封装是否有用,或者它是一个好主意,一步到位?
在我的Java应用程序中,我有一些这样的复制构造函数
public MyClass(MyClass src) {
this.field1 = src.field1;
this.field2 = src.field2;
this.field3 = src.field3;
...
}
Run Code Online (Sandbox Code Playgroud)
现在Netbeans 6.9警告这个,我想知道这个代码有什么问题?
我的担忧:
编辑:实际警告是"访问另一个对象的私有字段",Netbeans提供的唯一可用操作是添加一个@SuppressWarnings("AccessingNonPublicFieldOfAnotherObject")
我的代码实际上和给定的例子一样简单.
setter方法是否仅用于设置属性的值,因为它作为参数传递?在将值赋给属性之前,我们可以编写一些验证逻辑吗?
假设我有很多函数,alotoffunc.py它被多于一种类型的对象使用.
比方说,ObjectI和ObjectII与ObjectXI所有在使用一些功能alotoffunc.py.每个Object都使用不同的函数集,但所有对象都有变量object.table.
alotoffunc.py:
def abc(obj, x):
return obj.table(x) * 2
def efg(obj, x):
return obj.table(x) * obj.table(x)
def hij(obj, x, y):
return obj.table(x) * obj.table(y)
def klm(obj, x, y):
return obj.table(x) *2 - obj.table(y)
Run Code Online (Sandbox Code Playgroud)
然后我导入函数并重载它们:
import alotoffunc
class ObjectI:
def abc(self, x):
return alotoffunc.abc(self, x)
def efg(self, x):
return alotoffunc.efg(self, x)
class ObjectII:
def efg(self, x):
return alotoffunc.efg(self, x)
def klm(self, x, y):
return alotoffunc.klm(self, x, y) …Run Code Online (Sandbox Code Playgroud) 您知道在项目规模扩大时模块化C代码有哪些方法,实践和约定?
除了明确清晰,我们为什么要坚持:
car.getSpeed()和car.setSpeed(55)
当这可以作为很好:
car.speed()和car.speed(55)
我知道get()和set()对于通过将所有内容保存在一个地方来保持对数据成员的任何更改都是有用的.
另外,显然,我理解car.speed()并且car.speed(55)是相同的功能,这使得这个错误,但是在PHP和Zend Framework中,相同的操作用于GET,POST和回发.
在VB和C#有"属性",和许多被使用,多少我听说纯粹主义者的厌恶,并有东西在类似于Ruby,5.times和.each,.to_i等
你有操作符重载,多重继承,虚拟函数C++,某些组合可以驱使任何人坚果.
我的意思是说,有太多的范例和方法可以完成任务,似乎没有人尝试过我提到的特定组合.
至于我,我的理由是阅读代码简短而清晰.
我错了,稍微错了,这只是奇怪的,所以不使用,或者还有什么?
如果我仍然决定保持正确,我可以使用car.speed()和car.setSpeed(55).
这有什么不对(只是省略"获取")?
谢谢你的任何解释.
为包含地图的类实现/提供getter/setter的最佳实践是什么?
我看到的最常见的实现是:
public class MyClass {
private Map<String, String> myMap;
public getMyMap() { /* Return an unmodifiable map */ }
public setMyMap(Map<String, String> myMap) { ... }
}
Run Code Online (Sandbox Code Playgroud)
或者提供如下界面会更好:
public getMyMap() { /* Return a modifiable map */ }
public addToMap(String key, String value) { myMap.put(key, value); }
Run Code Online (Sandbox Code Playgroud)
为什么这种方法更好?
从一些简短的提示,我发现当我执行以下操作时覆盖子类中的超类方法时出现错误:
但是,如果我在另一个方向执行此操作,则不会抛出任何错误:
这对我来说似乎很直观 - 我希望它能以相反的方式工作,以强制执行信息隐藏和封装.这似乎允许糟糕的设计,允许内部以可能破坏其他方法的方式暴露,我不能看到这是一个好主意的情况.为什么以这种方式实施,我错过了什么?
此外,这是其他编程语言的标准做法吗?
我FOO()在类A中有一个方法,它从类的数据成员中获取其参数输入B(假设它们是两个浮点数和一个int).我理解这一点的方式,通常更好地实现这一点,如:
A->FOO1(B, other_data_x)
Run Code Online (Sandbox Code Playgroud)
而不是
A->FOO2(B.member1, B.member2, B.member3, other_data_x).
Run Code Online (Sandbox Code Playgroud)
我收集了一个,但不是唯一的优点是它留下了B访问哪些成员的细节,FOO1()因此有助于隐藏实现细节.
但我想知道的是,这是否真正引入了类A和之间的额外耦合B.类A在前者的情况下必须知道类B存在(通过类似include class_B_header.h),如果成员B变化或移动到不同的类或类B被完全消除,你需要修改A和FOO1()相应.相比之下,在后一种方法中,FOO2()并不关心类是否B存在,实际上它关心的是它提供了两个浮点数(在这种情况下由B.member1和组成B.member2)和一个int(B.member3).可以肯定的是,在后一个示例中也存在耦合,但是这种耦合在任何地方都可以处理FOO2()被调用或任何类正在调用FOO2(),而不是在A或的定义B.
我想这个问题的第二部分是,是否有解耦的好办法A,并B进一步当我们要实现类似的解决方案FOO1()?
使用JavaScript动态地将样式(即在运行时创建样式的值)应用于HTML元素的好方法是什么?
我正在寻找一种方法来将JavaScript小部件(JS,CSS和标记)打包在一个组件中(基本上是一个对象).我们的想法是让组件封装样式(因此用户可以使用一个很好的API来修改它,而不是直接修改CSS并间接应用更改的更紧密耦合的方法).问题是单个API调用可能意味着对几个样式元素的更改.
我这样做的方法是构造CSS并将styleatrribute设置为适当的元素(最有可能使用ID来避免将更改应用于标记的其他区域).这是一个好的解决方案吗?有没有更好的方法呢?
encapsulation ×10
oop ×6
java ×3
c ×1
c++ ×1
car-analogy ×1
class ×1
css ×1
decoupling ×1
getter ×1
inheritance ×1
interface ×1
javascript ×1
module ×1
namespaces ×1
object ×1
php ×1
python ×1
scoping ×1
setter ×1
styling ×1
visibility ×1