首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取属性的默认值(约定)

获取属性的默认值(约定)
EN

Stack Overflow用户
提问于 2022-03-05 08:43:00
回答 2查看 253关注 0票数 0

我想实现一个非常基本的东西(在任何正常语言中):我想得到一个属性的默认值(约定)。在第懒惰配置章中,Gradle文档描述了如何将约定应用于属性:

代码语言:javascript
复制
def property = objects.property(String)

// Set a convention
property.convention("convention 1")
println("value = " + property.get())

// Can replace the convention
property.convention("convention 2")
println("value = " + property.get())

property.set("value")

// Once a value is set, the convention is ignored
property.convention("ignored convention")
println("value = " + property.get())

问题是,当您设置一个值时,您无法查询property以获得什么是约定(默认值)。似乎唯一的方法是清除(取消)价值:

代码语言:javascript
复制
property.value(null).get()

但这是愚蠢的,因为你做的是不必要的行动,而惯例在某处?

有人知道如何在不清除价值的情况下得到它吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-16 14:22:37

答案(对于2022年)是:否,您无法获得属性的默认值(约定)。

票数 1
EN

Stack Overflow用户

发布于 2022-03-05 14:47:30

我将尝试回答为什么set一调用convention就会重写它。convention是默认值,一旦属性通过调用set获得一个值,则convention将被忽略,因为该属性具有一个值。这是合理的,因为这就是默认值应该意味着什么。如果我有一个值,那就使用这个默认值。Conventionset似乎遵循了这种模式。我不太明白为什么这会让你对如何使用gradle感到惊讶,但作为一个外部观察者,我认为gradle正在做的是预期的事情。

可以使用以下方法测试属性是否存在

代码语言:javascript
复制
if( property.isPresent() ) {
    // do whatever
}

我敢打赌,isPresent()将在get()返回约定时说假,但如果调用set,则isPresent()将返回true

还有其他帮助方法,如:

代码语言:javascript
复制
def val = property.getOrElse( "SomeDefault" )
def maybe = property.getOrNull()

我确实认为Gradle并不总是能很好地从主页和文档(例如groovydoc)中访问API来回答更复杂的问题:https://docs.gradle.org/current/javadoc/org/gradle/api/provider/Property.html

这些方法是超级接口提供程序,因此,如果不查找链,它们可能并不明显可用:

https://docs.gradle.org/current/javadoc/org/gradle/api/provider/Provider.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71360729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档