这个问题在这里已经有了答案:Whyusegettersandsetters/accessors?(37个回答)关闭7年前。我目前正在开发一个具有多种不同模式的Java简单游戏。我扩展了一个主游戏类,将主逻辑放在其他类中。尽管如此,主要的游戏类仍然相当庞大。在快速查看我的代码后,其中大部分是Getter和Setter(60%),而其余部分则是游戏逻辑真正需要的。一些Google搜索声称Getter和Setter是邪恶的,而其他人则声称它们对于良好的OO实践和出色的程序是必要的。那我该怎么办?应该是哪个?我应该为我的私有(private)变量更改我的Getter和Setter,还是应该坚持
我正在开发一个新的Android项目(Java),并创建了一个包含大量变量的对象。由于我打算为所有这些添加getter和setter,我想知道:Eclipse中是否有一个快捷方式可以自动生成给定类中的getter和setter? 最佳答案 在所需类的源代码窗口中调出上下文菜单(即右键单击)。然后选择Source子菜单;从该菜单中选择GenerateGettersandSetters...将导致出现一个向导窗口。Source->生成Getter和Setter...选择您要为其创建getter和setter的变量,然后单击OK。
OptionalJava8中引入的type对很多开发者来说是个新鲜事物。是返回Optional的getter方法键入代替经典Foo一个好的做法?假设该值可以是null. 最佳答案 当然,人们会做他们想做的事。但我们在添加此功能时确实有一个明确的意图,它不是是通用的Maybe类型,就像很多人希望我们这样做一样。我们的目的是为库方法返回类型提供一种有限的机制,在这种情况下,需要一种明确的方式来表示“无结果”,而使用null则极有可能导致错误。例如,您可能永远不应该将它用于返回结果数组或结果列表的东西;而是返回一个空数组或列表。您几乎不应
是否可以为类变量自动生成/启用getter/setter,就像使用attr_accessor为实例变量生成的那样:classSchool@@syllabus=:cbsedefself.syllabus@@syllabusenddefself.syllabus=(_)@@syllabus=_endendSchool.syllabus=:icseSchool.syllabus#=>:icse 最佳答案 您需要做的就是在类的范围内声明attr_accessor:classSchoolclass:icse请注意,底层成员不会是@@sylla
moduleHasUrlextendActiveSupport::Concernincludeddoattr_accessor:barenddefbar0endendclassFoobar属性不存储在数据库中,但在表单中使用(使用SimpleForm的f.input)。我想覆盖此方法的getter,以便我可以根据其他属性设置bar并让表单正确地预填充值。问题是在这样的包含block中使用attr_accessor会在Foo类上设置getter。因为该模块包含在祖先链中的Foo之上,所以永远不会触及返回0的自定义bar方法。解决这个问题的一种方法是classFoo但我想避免这个额外的步骤
在Ruby中,在类的实例方法中,我们使用getterbyfoo我们使用setter方法self.foo=something一个不需要self.而另一个需要,有没有办法让它们看起来更相似,而不是使用像self.foo作为getter,因为它看起来也很冗长。(更新:注意getter和setter可能只是获取或设置一个实例变量,但它们也可能做很多工作,例如进入数据库并检查记录是否存在,如果不存在,则创建它,等等) 最佳答案 由于本地作用域优先,当你说foo=something时,将创建一个局部变量foo并分配something的内容.您可
如何在Ruby中为ActiveRecord对象定义自定义getter函数,以对ActiveRecord对象数组执行操作?例如,我想返回对象数组的加权平均值。因此,如果我有贷款对象(1,2,3),其字段金额为(100,200,300)和default_rate(.1,.2,.3),然后使用正常的ActiveRecord函数Loan.find(1).amount应该返回100,Loan.find(2).default_rate应该返回.2。但如果我有Loan.find(2,3).default_rate,我希望它返回违约率的加权平均值,即.26。我知道我可以使用SQLselect语句来做到
我已经使用Ruby一段时间了。现在我要深入挖掘并找到所有问题的答案。我希望我能在这里找到这个问题的答案。所以这是我在下面的代码中的问题:classGameattr_accessor:in_progressdefinitialize@in_progress=falseenddefstart!#debuginfoputsself.inspect#=>#putsself.class.instance_methods(false)#=>[:in_progress,:in_progress=,:start!]putsself.instance_variables#=>[:@in_progress
我需要验证信用卡号。modelBillingvalidates:card,credit_card_number:true,allow_nil:true验证gem代码:defvalidate_each(record,attribute,value)record.errors.add(attribute,options[:message]||:invalid)unlesscredit_card_valid?(value,extract_brands(record,options))end它工作正常。但后来我尝试以这种方式覆盖geter:defcard"****#{self[:card][-
下面的代码按预期运行,但是它们是否有任何缺点用属性的getter覆盖方法(参见下面代码中的action_label)?查看代码中的:action_labelclassBaseActiondefaction_labelraiseNotImplementedErrorenddefrunputs"Runningaction:#{action_label}"yieldendendclassSimpleAction 最佳答案 attr_reader:action_label只是定义了一个方法。Ruby中的“getter”就是这样的方法defa