我是Java的新手,想要创建一些类变量,在访问时动态计算,就像Python中使用property()方法一样。然而,我不太确定如何描述这个问题,所以在谷歌上搜寻了很多关于Java“Property”类的信息,但这似乎不是同一个东西。Java中与Python的property()方法等效的是什么?
我是Java的新手,想要创建一些类变量,在访问时动态计算,就像Python中使用property()方法一样。然而,我不太确定如何描述这个问题,所以在谷歌上搜寻了很多关于Java“Property”类的信息,但这似乎不是同一个东西。Java中与Python的property()方法等效的是什么?
Java语言本身没有内置此功能。您需要自己编写所有getter和setter。不过,像Eclipse这样的IDE可以为您生成模板代码。
例如:
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;
}
}
@Getter
和@Setter
,这与Python的property
有些相似。class Point{
@Getter @Setter private int x, y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
}
属性
一样在该类中访问它,我该如何实现这个? - Azhar Uddin Sheikh内置的property()函数与这里答案中描述的完全相反。它不是用于为成员变量生成getter和setter。它只允许您通过访问属性来调用方法(因此,尽管您只是访问Python类中的变量,但将调用一个函数)。(此文章解释了如何以及为什么使用它。)
话虽如此,Java没有类似的东西。更重要的是,在Java中不鼓励使用属性访问。我猜您可以在Groovy脚本语言和元编程中实现此功能。但我不知道如何做到这一点。
它们并不是真的存在。在Java中,常见做法是将成员声明为private
或protected
,并仅通过方法访问它们。这通常会导致大量小型的getFoo()
和setFoo(newFoo)
方法。Python实际上没有private
和protected
,更常见的是允许直接访问成员。
正如其他人所指出的那样,Java有getter和setter,但没有严格的类比。有一个第三方库叫做Project Lombok,它使用注释在编译时生成.class文件中的getter和setter。这可以用来使代码更简洁。
实际上,您可以在Java中模拟此行为。
警告:下面的解决方案不太美观
您可以编写一个方法在实用程序类中,如下所示:
public Object getProperty(String property, Object obj) {
if (obj != null && property != null) {
Field field = obj.getClass().getDeclaredField(property);
field.setAccessible(true);
try {
return field.get(obj);
} catch (Exception ex) {
return null;
}
}
return null;
}