是否可以直接获取变量值而不是在Java中使用getter?

时间:2017-05-27 12:11:33

标签: java getter convention

我正在编写在坐标系上运行的程序,所以我需要经常使用坐标。我决定使用Point类,因为它显然可以轻松存储点的坐标。

我的程序中的问题无处不在,我将其存储为for path, dirs, files in os.walk(start_path): full_path = os.path.abspath(os.path.realpath(path)) # just to cover symlinks of.write("{} {}\n".format(full_path, os.path.getsize(full_path))) # not a real size! for file in files: file_path = os.path.join(full_path, file) # get the file path size = os.stat(file_path).st_size # get the actual file stats of.write(" {} {}\n".format(file_path, size)) # write the file path and size total_size += size ,而int在使用PointgetX()方法时返回double。当然,我可以轻松地将其转换为getY(),但它看起来并不优雅,并且会给代码增加不必要的混乱。

如果我直接得到这个值,可以吗?像这样:

int

而不是:

Point p = new Point(0, 0);
int x = p.x;

我甚至不确定它是否有任何区别,我只知道吸气剂和制定者是有原因的,应该使用。

4 个答案:

答案 0 :(得分:3)

  

我正在编写在坐标系上运行的程序,所以我需要   经常使用坐标。我决定使用Point类,因为它   显然可以轻松存储点的坐标。

  

我的程序中的问题无处不在,我把它存储为int而不是   使用getX()和getY()方法时,Point返回double。

您确定它显然可以轻松存储您域名的点坐标吗?
我不认为。
如果您需要操作一些Class B { public void fetchA() { A classA = new A(); int a = classA.getA(); } } 实例,则使用java.awt.Point类是有意义的。

这门课似乎不适合你的需要。

  • 如果您确实不需要使用java.awt.Point

您应该在编写时创建并使用自己的java.awt.Point类,该类返回Point值:

int
  • 如果您改变了主意,而您恰好需要使用int x = p.getX(); 执行某些任务:

在自定义java.awt.Point课程中,添加一个方法以返回Point个实例。

答案 1 :(得分:1)

@Sarjan是的......有些人可能认为,制定者和吸气者是邪恶的。但我想这对各种情况都有帮助,特别是在大型项目中。示例示例是验证。比如说,如果你想只在大于0的情况下设置x,如果它是公共的,你就不能优雅地执行它(除非你在设置变量之前进行检查。所有地方!!! ...单调乏味 - 并且缺少如果某个新程序员在你的项目中工作并且没有意识到这一点,它将在某一天崩溃你的系统。如果你使用setter,你可以在setter本身内检查它是否大于0,从而提供简单的实现!

PS:我不能发表评论,因为它太长了,因此写成了答案。

答案 2 :(得分:1)

您已关联Point的相关文档。所以仔细阅读并考虑你的问题,而不是开始编码和思考,首先想到一个想法。然后了解java.awt.point班级最适合您的情况。

如果它不适合您的情况,您可以实现一个类。否则,请遵循文档。遵循文档和OOP概念是一种很好的做法。

Point p = new Point(0, 0);

如果您已按照文档进行操作,则会看到如下:

  

Point():   构造并初始化一个点的原点(0,0)   坐标空间。

我认为你对此并不清楚。然而,

Point p = new Point();
int x = p.x;

这不是问题,因为xpublic及其程序。但为什么他们实施了这个:

getX();

另请阅读这些内容 - getters and settersimplementation of Point class

答案 3 :(得分:0)

让,你有2个班级。这些是:Class A& Class B

在A类中,您有一个私有实例变量。

A类:

Class A {
    private int a;

    public int getA() {
        return A;
    }

}

现在,您要从a访问名为Class A的{​​{1}}变量。但变量是私有的。所以,现在我们需要getter方法,因为getter方法是公共的。

B类:

Class B

在这种情况下,我们需要getter方法。