我对Scala比较陌生。我有几个辅助方法,需要将它们放在某个地方。我的直觉是在无状态object
中对辅助方法进行分组。
然而,我或其他人可以开始使用var
字段向该对象添加状态。这将导致副作用,不仅是辅助方法的参数,而且对象的状态可以影响方法的行为。
我想暂时保护它,并且需要将对象标记为不保持(可变)状态,以便编辑器或某些验证工具(例如Fortify)在有人尝试向对象添加状态时引发错误。 Scala有可能吗?是否有@Immutable
或@Stateless
注释?
示例代码:
object StreamHelpers /* <-- this needs to be marked immutable or stateless */ {
var something: String = "change me" // <-- this should cause build to fail
def streamToString(stream: InputStream): String = {
managed(new InputStreamReader(stream, StandardCharsets.UTF_8))
.map(reader => CharStreams.toString(reader)).getTry.get
}
// other stuff
}
更新:根据评论中的讨论,我很想知道在Scala中是否可以:
var
- s添加到object
OR
val
- 和var
- s添加到object
包含任何类型的关键字或注释。或者,如果Scala不支持开箱即用,可以通过宏或元编程实现这一目标吗?
答案 0 :(得分:1)
使用WartRemover。没有内置的检查(除了禁止所有使用var
),但它不应该写一个(并包括可变集合{{ 1}}当你在它的时候)。或者,如果您只想将特定对象标记为不可变,则macro annotation将采用基本相同的代码。