这是一个非常简单的例子,直接访问可能很危险
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/