java - Java 计算属性
问题描述
我使用 Jacob 库来操作我的 Win32 应用程序。我得到了一些 java SomeClass,它是 win32 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 或 setProperty 方法?
例如,在 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)
}
}
}
解决方案
不幸的是,Java 中没有“属性”的概念,即不可能通过为字段分配值或从中读取值来触发 setter 或 getter 调用。
一种通用模式是调用 getter 和 setter 方法,而不是将字段值保持为私有,因此它只能作为类中的值访问。
Java 社区有过度使用自动为私有字段提供 getter 和 setter 的趋势(Java Bean 中的情况)。建议首先不要为不应从外部直接访问的数据定义 getter/setter 方法,其次,尽可能使用最终值,因此不要为它们定义 setter,第三,对 DTO 使用公共字段目的是传输数据(参见鲍勃叔叔的“清洁代码”)。
推荐阅读
- sql-server - SQL Server Service Broker - 改进 SQL 执行框架的方法
- javascript - Chrome 本地 IndexedDB (PouchDB) 复制到 CouchDB 问题
- c# - unity camera 通过鼠标输入旋转,如何旋转移动到默认位置?
- python - python中的二维列表
- r - 是否可以仅更改 1 个方面标题的对齐方式
- sql - Oracle中的数字格式问题
- javascript - 如何从 Google API Json 响应中获取特定值?
- fluent-bit - 如何在尾部插件中获取偏移字段或行号?
- mysql - 当 kivy 应用程序被杀死时关闭数据库连接
- assembly - 可以访问具有内存地址索引的数组吗?