有一个Groovy等价于Gradle findProperty吗?
我正在寻找一种方法,以避免首先使用有一个Groovy等价于Gradle findProperty吗?,groovy,Groovy,我正在寻找一种方法,以避免首先使用hasProperty()检查属性 理想的情况下,我想要像 def a = myobj.getPropertyOrElse("mypropname", "defaultvalueifpropertymissing') 我看到gradle有一个findProperty(),但对于普通groovy我找不到类似的东西 我能想到的最短版本是 def a = if (a.hasProperty("mypropname")) a.getProperty("mypropna
hasProperty()
检查属性
理想的情况下,我想要像
def a = myobj.getPropertyOrElse("mypropname", "defaultvalueifpropertymissing')
我看到gradle有一个
findProperty()
,但对于普通groovy我找不到类似的东西 我能想到的最短版本是
def a = if (a.hasProperty("mypropname")) a.getProperty("mypropname") else "defaultvalueifmissing"
这显然会重复属性名称两次。创建自己的方法是可能的,但仅限于当前类
class MyClass {
String name = "the name"
}
def a = new MyClass()
def getProperty(Object theInstance, String propName, Object defaultValue) {
if (theInstance.hasProperty(propName)) theInstance.getProperty(propName) else defaultValue
}
assert "the name" == getProperty(a, "name", "")
assert "default value" == getProperty(a, "method", "default value")
我能想到的最短版本是
def a = if (a.hasProperty("mypropname")) a.getProperty("mypropname") else "defaultvalueifmissing"
这显然会重复属性名称两次。创建自己的方法是可能的,但仅限于当前类
class MyClass {
String name = "the name"
}
def a = new MyClass()
def getProperty(Object theInstance, String propName, Object defaultValue) {
if (theInstance.hasProperty(propName)) theInstance.getProperty(propName) else defaultValue
}
assert "the name" == getProperty(a, "name", "")
assert "default value" == getProperty(a, "method", "default value")
hasProperty
方法返回一个MetaProperty
实例,您可以使用该实例通过传递原始实例来检索值:
def a = myobj.hasProperty('mypropname')?.getProperty(myobj) ?:
'defaultvalueifpropertymissing'
然后使用安全导航操作符(
?。
)和Elvis操作符(?:
)避免使用if/else
,hasProperty
方法返回一个元属性
实例,您可以通过传递原始实例来检索该值:
def a = myobj.hasProperty('mypropname')?.getProperty(myobj) ?:
'defaultvalueifpropertymissing'
然后使用安全导航操作符(
?。
)和Elvis操作符(?:
)避免出现if/else
可以使用的getProperties()
或getProperty()
:
您可以使用以下各项的
getProperties()
或getProperty()
:
我在这个问题中添加了一个
getPropertyOrElse
的实现(由于重复,我认为这是一个合适的地方)-这个问题明确地要求一个解决方案来检查属性是否存在,这正是我试图避免的。我在问是否有一种方便的方法/语法可以避免显式检查。仅供参考,地图会将其放在表上,并且有withDefault
-这个问题明确要求解决方案来检查属性是否存在,这正是我试图避免的。我想问的是,是否有一种方便的方法/语法可以避免显式检查。仅供参考,映射将其放在表上,并使用默认值
这是一种改进,尽管重复myobj仍然困扰着我,但它比重复属性名要好。这是一种改进,尽管重复myobj仍然困扰着我,但这比重复属性名要好