Java中的参数对于简单的构造函数和setter是否存在可接受的标准约定?(I'veseentheanswerforC++,但两个社区的做法通常不同)假设我有一个带有foo字段的C类。我经常看到以下三个选项:1)使用带下划线的实际字段名称:publicC(Typefoo_){foo=foo_;}publicvoidsetFoo(Typefoo_){foo=foo_;}2)使用实际的字段名,设置中使用“this”即可:publicC(Typefoo){this.foo=foo;}publicvoidsetFoo(Typefoo){this.foo=foo;}3)完全不一致的事情,例如:p
在Java中,变量应该保持私有(private)以实现更好的封装,但是静态常量呢?这个:publicstaticfinalintFOO=5;结果与此等价:privatestaticfinalintFOO=5;...publicstaticgetFoo(){returnFOO;}但哪种做法更好? 最佳答案 不直接在代码中使用常量的原因之一。假设FOO稍后可能会更改(但仍保持不变),例如publicstaticfinalintFOO=10;。只要没有人愚蠢到直接硬编码值,就不应该破坏任何东西吗?没有。Java编译器会将上面的Foo等常量
我需要一个小的容器类来存储一些应该是不可变的字符串。由于String本身是不可变的类型,所以我想到了类似的东西:publicfinalclassImmu{publicfinalStringfoo;publicfinalStringbar;publicImmu(finalStringfoo,finalStringbar){this.foo=foo;this.bar=bar;}}许多人似乎根本反对使用公共(public)字段,而是使用Getter。恕我直言,在这种情况下这只是样板,因为String本身是不可变的。我可能在这个问题上遗漏了其他想法? 最佳答案
有没有更好的标准方法在Java中创建getter和setter?必须为每个变量显式定义getter和setter是非常冗长的。有更好的标准注释方法吗?Spring有这样的东西吗?C#也有属性。 最佳答案 我不确定你是否认为它是“标准的”,但是ProjectLombok解决了这个问题。他们使用注解来代替Java的大部分冗长。有些人正在寻找替代的Java兄弟语言,例如Groovy或Scala。恐怕需要几年时间——如果有的话——JSR会找到一种“标准化”的方式来在Java中“修复”这个问题。
什么是更好的做法和原因:通过protected字段或私有(private)字段上的公共(public)getter访问基类变量。(无论如何,getter都会公开) 最佳答案 如果无论如何都会有一个公共(public)setter/getter,你为什么要比绝对必要的更广泛地公开这个领域本身?这意味着它可以立即被子类写入(除非它是final开始的)。我个人喜欢我的所有字段都是私有(private)的:它在API和实现之间提供了更清晰的分离。我认为父类(superclass)和子类之间的关系类似于调用者和被调用者的关系——对底层实现的更
我写了一个有很多getter的java类..现在我想获取所有getter方法并在某个时候调用它们..我知道有诸如getMethods()或getMethod(Stringname,Class...parameterTypes)之类的方法,但我只想得到真正的setter/getter......,使用正则表达式?谁能告诉我?谢谢! 最佳答案 不要使用正则表达式,使用Introspector:for(PropertyDescriptorpropertyDescriptor:Introspector.getBeanInfo(yourCla
为什么GSON使用ONLY字段(私有(private)、公共(public)、protected)?有没有办法告诉GSON只使用getter和setter? 最佳答案 一般来说,当您序列化/反序列化对象时,您这样做是为了得到对象状态的精确副本;因此,您通常希望规避OO设计中通常需要的封装。如果您不规避封装,则可能无法最终得到一个在反序列化之后具有与序列化之前完全相同的状态的对象。此外,请考虑您不想为特定属性提供setter的情况。如果您正在使用getter和setter,序列化/反序列化应该如何操作?
我已经读过,为了避免循环依赖,我可以在setter上使用@Autowired而不是构造器。如果是这样,为什么会失败?@ComponentprivatestaticclassA{@AutowiredpublicA(Bb){}}@ComponentprivatestaticclassB{privateAa;publicB(){}@AutowiredpublicvoidsetA(Aa){this.a=a;}}如果我将A类定义为类似于B的类,一切正常,但上面的应该已经可以工作了,那为什么不行呢?我处于无法摆脱A类的构造函数中的依赖关系的情况。在这种情况下我该怎么办?编辑:我正在使用Spring
有什么方法可以让我在springbean上设置setter方法的顺序。例如:在上述场景中,value1的setter在value2的setter之前被调用。当我如下颠倒属性顺序时Value2的setter方法在value1之前被调用。有什么优雅的方法可以强制我们总是在value2之前调用value1的setter。一种方法是在value2的setter中抛出异常......向用户询问所需的顺序。有没有其他办法? 最佳答案 我猜你在setter中做了一些逻辑,在设置value2时你假设value1可用。而不是依赖这样的顺序,你应该使用
我有一颗bean:documentLogic、stateAccess和contextAccess是BasketLogicImpl上的字段我没有EfcoBasketLogic.java:publicclassEfcoBasketLogicextendsBasketLogicImpl{@InjectprivateEfcoErpServiceerpService;.........}erpService是null,除非我提供了setter。但为什么?我认为在进行Autowiring的地方不需要二传手?会不会是BasketLogicImpl负责? 最佳答案