Java中等效于Python的property()是什么?
我刚开始学习Java,想创建一些类变量,这些变量在被访问时会动态计算,就像在Python中使用property()方法那样。不过,我不太确定该怎么描述这个,所以在网上搜索时看到很多关于Java“Property”类的内容,但这似乎不是同样的东西。那么,Java中有什么和Python的property()相似的东西呢?
6 个回答
2
其实它们并不存在。在Java中,通常会把类里的成员设置为private
(私有)或protected
(受保护),然后只能通过方法来访问这些成员。这种做法常常会导致很多小方法,比如getFoo()
和setFoo(newFoo)
。而在Python中,实际上没有private
和protected
这样的概念,通常会直接允许访问类里的成员。
4
内置的property()函数的作用和这里回答的内容正好相反。它并不是用来为成员变量生成获取器和设置器的。它的作用是让你通过访问一个属性来调用一个方法(所以,虽然你在Python类中只是访问一个变量,但实际上会调用一个函数)。这篇文章解释了如何以及为什么使用它。
说到这里,Java并没有类似的功能。更重要的是,在Java中不鼓励使用属性访问。不过,我想你可以在Groovy脚本语言中和一些元编程的技巧实现这个功能,但我不太记得具体怎么做了。
9
在Java语言中,没有自动生成获取器和设置器的功能。你需要自己手动写这些代码。不过,有些开发工具,比如Eclipse,可以帮你自动生成这些重复的代码。
举个例子:
class Point{
private int x, y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
public void setX(int x){
this.x = x;
}
public int getX(){
return x;
}
public void setY(int y){
this.y = y;
}
public int getY(){
return y;
}
}
你可以看看Project Lombok,它提供了类似于Python中property
的注解@Getter
和@Setter
。
使用Lombok之后,上面的例子可以简化为:
class Point{
@Getter @Setter private int x, y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
}