为延迟初始化的成员变量实现getter方法并保持const正确性的正确方法是什么?也就是说,我希望让我的getter方法为const,因为在第一次使用它之后,它就是一个普通的getter方法。const只是第一次(当对象首次初始化时)不适用。我想做的事:classMyClass{MyClass():expensive_object_(NULL){}QObject*GetExpensiveObject()const{if(!expensive_object_){expensive_object=CreateExpensiveObject();}returnexpensive_object
这是一个相当古老的话题:setter和getter是好是坏?我的问题是:编译器在C++/D/Java内联getter和setter?与直接字段访问相比,getter/setter对性能(函数调用、堆栈帧)的影响程度。除了使用它们的所有其他原因之外,我想知道它们是否会影响性能,除了是一种良好的OOP实践。 最佳答案 这取决于。没有永远正确的通用答案。在Java中,JIT编译器可能会迟早内联它。据我所知,JVMJIT编译器只优化大量使用的代码,因此您最初可以看到函数调用开销,直到getter/setter被足够频繁地调用。在C++中,它
我正在使用Jackson将POJO转换为JSON以存储在数据库中。但是我有一个我想忽略的setter/getter。我看到了很多与@JsonIgnoreProperties相关的信息,但我似乎无法取得任何进展。我基本上想要@Transient的等价物。基本用例(我想忽略InternationalNumber):publicclassPhoneNumber{privateStringcountry;privateStringnumber;publicPhoneNumber(){}publicStringgetCountry(){returncountry;}publicStringget
publicstaticfunction__get($value)不起作用,即使它起作用了,碰巧我已经需要魔法__getgetter来获取同一类中的实例属性。这可能是一个是或否的问题,所以,有可能吗? 最佳答案 不,这是不可能的。引用manualpageof__get:Memberoverloadingonlyworksinobjectcontext.Thesemagicmethodswillnotbetriggeredinstaticcontext.Thereforethesemethodscannotbedeclaredstat
我现在正在学习C#类(class),我正在尝试找出最好的做事方式。我来自Java背景,所以我只熟悉Java最佳实践;我是C#新手!在Java中,如果我有私有(private)属性,我会这样做;privateStringname;publicvoidsetName(Stringname){this.name=name;}publicStringgetName(){returnthis.name;}在C#中,我发现有很多方法可以做到这一点。我可以像Java一样做:privatestringname;publicvoidsetName(stringname){this.name=name;}
我来自php世界。您能否解释一下什么是getter和setter,并给您一些例子? 最佳答案 教程并不是真正需要的。阅读encapsulationprivateStringmyField;//"private"meansaccesstothisisrestrictedtotheclass.publicStringgetMyField(){//includevalidation,logic,loggingorwhateveryoulikeherereturnthis.myField;}publicvoidsetMyField(Stri
您使用什么约定来评论getter和setter?这是我很长一段时间以来一直想知道的事情,例如:/***(1a)whatdoyouputhere?*@paramsalary(1b)whatdoyouputhere?*/publicvoidsetSalary(floatsalary);/**(2a)whatdoyouputhere?*@return(2b)*/publicfloatgetSalary();我总是发现我在为1a/b和2a/b写几乎完全相同的东西,比如1a)设置员工的薪水,1b)员工的薪水。这似乎是多余的。现在我可以看到对于更复杂的内容,您可能会在(a)部分中写更多内容,以提供
我需要获取具有特定注释的字段的值,因此通过反射我能够获取此字段对象。问题是这个字段总是私有(private)的,尽管我事先知道它总是有一个getter方法。我知道我可以使用setAccesible(true)并获取它的值(当没有PermissionManager时),尽管我更喜欢调用它的getter方法。我知道我可以通过查找“get+fieldName”来查找方法(尽管我知道例如boolean字段有时被命名为“is+fieldName”)。我想知道是否有更好的方法来调用这个getter(许多框架使用getter/setter来访问属性,所以也许他们以另一种方式来做)。谢谢
我用C#编程已经有一段时间了,现在我想复习一下我的C++技能。上课:classFoo{conststd::string&name_;...};最好的方法是什么(我只想允许读取name_字段):使用getter方法:inlineconststd::string&name()const{returnname_;}公开该字段,因为它是一个常量谢谢。 最佳答案 对于长期存在的类来说,使用getter方法是更好的设计选择,因为它允许您在将来用更复杂的方法替换getter方法。尽管对于const值似乎不太可能需要此操作,但成本低且可能带来的好处
关于C++中的访问器方法的几个问题已经在SO上提出,但没有一个能够满足我对这个问题的好奇心。我尽量避免使用访问器,因为像Stroustrup和其他著名的程序员一样,我认为一个包含许多访问器的类是糟糕的OO的标志。在C++中,在大多数情况下,我可以为类添加更多责任或使用friend关键字来避免它们。然而在某些情况下,您确实需要访问特定的类成员。有几种可能:1.完全不要使用访问器我们可以将各自的成员变量公开。这在Java中是不行的,但在C++社区中似乎没问题。但是,我有点担心应该返回对对象的显式拷贝或只读(const)引用,这是否被夸大了?2。使用Java风格的get/set方法我不确定它