java - 避免直接从同一个类访问私有(private)属性

标签 java

这是一个非常简单的例子,直接访问可能很危险

class Something{

      public static final int MAX=123;

      private int prop;     

      final void riskyMethod()
      {
          this.prop=800; //this is wrong
      }    

      final void safeSetProp(int x)
      {
         if(x<MAX) 
         {
            prop=x;
         }
      }

}

我知道可以在另一个类中封装“prop”, 并将其定义为私有(private)的,但这是很多无用的代码开销!

有没有办法强制使用方法来访问相同的类属性?

关键字?任何技巧?

我承认我做了这样的事情来避免同一个类的意外访问

private int IKWIDprop;          //IKWID = I Know What I am Doing

我相信你会知道更好的方法 =)

问候!

最佳答案

这是你的课,加油!你总是知道你在做什么。如果不这样做,请编写测试。我知道你想强制使用 getter 而不是原始字段,以防将来某个时候 getter 会配备一些额外的逻辑。但因为这是您的类(class),所以您完全负责并有能力维护此代码。

奇怪的匈牙利符号只会使代码困惑。对您的类(class)进行单元测试,以确保没有人损坏您的工作(包括您自己)。没有人会阅读文档和 Javadoc,更不用说没有人会理解 TIASCWIAFDPUGIage(thisIsASpecialCaseWhenIAccessFieldDirectlyPleaseUseGetterInstead_Age),过一会儿就包括您在内。

顺便说一句,如果你强制在你的类中使用封装 getter,那么 getter 本身如何访问该字段?因此,回到地球并保持理性。拥有一套强大的单元测试更有帮助、更可靠,并提供更好的文档

更新:实际上,有一种(有点)干净的方法。您可以使用 AspectJ,使用一些巧妙的切入点,将捕获原始私有(private)字段访问,不包括某些特殊情况。它可以在编译时执行以使构建失败或在运行时执行。切入点会这样说:“每个未使用 @ThisASetter 注释的方法的私有(private)字段访问都应该生成编译时错误。也许更精通 AspectJ 的人可以写这个?

关于java - 避免直接从同一个类访问私有(private)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6575027/

相关文章:

java - 处理 HttpServletResponse 时运行 JerseyTest 的问题

java - token 上的语法错误扩展了预期

java - Gson反序列化Java.util.Date与时区

java - 架构和包

java - 正则表达式在java中查找以 'JD'固定字长开头的单词

java - 新十进制格式后 float 无效

java - 如何一次 pull IntelliJ IDEA ULTIMATE 项目中的所有模块?

java - 即使输入新值后,文本框的值属性仍保留旧值

java - 如何将 JScrollPane 添加到此 JTextArea?

Java 字符串排序错误