Java中访问someProperty时如何调用get/setProperty方法?(类比Swift计算属性)
如何在Jacob操作Win32应用时通过字段调用对应的get/setProperty方法?
嘿,我来帮你搞定这个问题!你现在在用Jacob库操作Win32应用,手里有个Java类SomeClass,代码是这样的:
public class SomeClass{ public String someProperty; public String getProperty(String propertyName){ return SomeStaticSystemClass.getProperty(propertyName); } public String setProperty(String propertyName, String value){ return SomeStaticSystemClass.getProperty(propertyName, value); } }
你想要实现的是:当获取或设置someProperty字段时,自动调用对应的getProperty("someProperty")或者setProperty("someProperty", value)方法,就像Swift里用计算属性实现的逻辑(你的Swift示例如下):
struct Rect { var origin = Point() var size = Size() var center: Point { get { let centerX = origin.x + (size.width / 2) let centerY = origin.y + (size.height / 2) return Point(x: centerX, y: centerY) } set(newCenter) { origin.x = newCenter.x - (size.width / 2) origin.y = newCenter.y - (size.height / 2) } } }
解决方案:用JavaBean规范封装属性访问
Java没有Swift那种原生的计算属性语法糖,但我们可以通过封装私有字段+标准getter/setter方法来实现完全相同的逻辑。具体做法是把原有的public someProperty改成私有,然后在getter和setter里调用你需要的getProperty和setProperty方法:
public class SomeClass { // 将原public字段改为私有,禁止直接访问 private String someProperty; // 自定义getter:获取属性时自动调用getProperty("someProperty") public String getSomeProperty() { return getProperty("someProperty"); } // 自定义setter:设置属性时自动调用setProperty("someProperty", value) public void setSomeProperty(String value) { setProperty("someProperty", value); } // 保留原有的工具方法 public String getProperty(String propertyName) { return SomeStaticSystemClass.getProperty(propertyName); } public String setProperty(String propertyName, String value) { return SomeStaticSystemClass.getProperty(propertyName, value); } }
用法说明
之后你要访问someProperty时,就用标准的JavaBean方式:
- 获取值:
String value = someClassInstance.getSomeProperty(); - 设置值:
someClassInstance.setSomeProperty("newValue");
这样每次调用getter/setter,都会自动触发对应的getProperty或setProperty方法,完全达到了你想要的类似Swift计算属性的效果。如果是在Jacob中对接Win32组件,这种封装方式也完全兼容Jacob的调用逻辑,不会有冲突。
内容的提问来源于stack exchange,提问作者Arthour
相关产品推荐
相关产品推荐

