GraphStream 1.3中setAttribute()与addAttribute()有何区别?
GraphStream 1.3 版本
setAttribute() 与 addAttribute() 的差异说明 核心行为结论
两个方法在1.3版本的实际运行逻辑完全没有区别,不存在功能差异:
- 二者都是给当前Element(Graph、Node、Edge都属于Element的实现类)绑定属性键值对
- 如果传入的属性key已经存在,都会直接覆盖原有属性值;如果key不存在,都会新增对应属性
- 二者的参数规则、异常抛出逻辑、返回值表现完全一致
对“仅为保持接口一致性”表述的解释
这个描述的实际含义是:
setAttribute()没有任何独立实现的特殊逻辑,它存在的唯一作用是对齐Java生态通用的API命名习惯。Java开发者普遍熟悉JavaBean的
getXxx/setXxx命名规范,也熟悉多数集合类“set覆盖、add新增”的命名预期,如果只保留addAttribute()方法,会和开发者的固有使用习惯冲突,提高上手门槛。因此类库作者额外加了同逻辑的setAttribute()方法,让不同命名习惯的开发者都能找到符合自己预期的方法入口。
源码层面的验证
直接查看1.3版本的Element接口对应实现代码就能确认:
- 所有属性写入的核心逻辑都实现在
addAttribute()的重载方法中 - 所有
setAttribute()的重载版本,内部都是直接转调对应参数签名的addAttribute()方法,没有任何额外的分支判断、逻辑处理 - 不存在“
addAttribute()是追加属性值、setAttribute()是覆盖属性值”的差异,这类说法大多是把其他图计算类库、UI组件库的属性逻辑错误套用到了GraphStream 1.3版本上。
内容的提问来源于stack exchange,提问作者Kfir Ettinger
相关产品推荐
相关产品推荐

