gpt4 book ai didi

Grails 检查一个类是否有一个具有特定值的静态变量

转载 作者:行者123 更新时间:2023-12-04 23:18:46 25 4
gpt4 key购买 nike

我在 grails 中有一个类,例如:

class Autoresponder {
static String TYPE_NONE = "none"
static String TYPE_GETRESPONSE = "GetResponse"
static String TYPE_MAILCHIMP = "MailChimp"
static String TYPE_AWEBER = "AWeber"
static String TYPE_INFUSIONSOFT = "InfusionSoft"
static String TYPE_ICONTACT = "iContact"
static String TYPE_SENDY = "Sendy"
static String TYPE_ACTIVECAMPAIGN = "ActiveCampaign"
static String TYPE_API_ACTIVATE = "activate"
static String TYPE_ONTRAPORT = "ontraport"

//rest of code
}

我只想简单地发现上面的类有一个值为 AWeber 的静态变量.
我该怎么做?有没有办法获取类中的所有静态用户定义变量(从而将每个变量的值与我想要的值进行比较)?

编辑:
由于某些技术原因,我无法更改类定义。

最佳答案

只需遍历所有静态字段,寻找具有所需值的字段。如以下 groovy 脚本示例

import static java.lang.reflect.Modifier.isStatic

class Autoresponder {
static String TYPE_NONE = "none"
static String TYPE_GETRESPONSE = "GetResponse"
static String TYPE_MAILCHIMP = "MailChimp"
static String TYPE_AWEBER = "AWeber"
static String TYPE_INFUSIONSOFT = "InfusionSoft"
static String TYPE_ICONTACT = "iContact"
static String TYPE_SENDY = "Sendy"
static String TYPE_ACTIVECAMPAIGN = "ActiveCampaign"
static String TYPE_API_ACTIVATE = "activate"
static String TYPE_ONTRAPORT = "ontraport"
}

def getStaticAttributeWithValue(Class clazz, Object searchedValue) {
clazz.declaredFields
.findAll{ isStatic(it.modifiers) }
.find { clazz[it.name] == searchedValue }
}

assert getStaticAttributeWithValue(Autoresponder, "AWeber") != null
assert getStaticAttributeWithValue(Autoresponder, "NonExist") == null

如果函数返回 null,则没有具有该值的静态字段,否则,它将不为 null。 (实际上它将是 java.lang.reflect.Field 类型的对象)

还有另一种获取类中所有静态属性的方法,即使用 groovy MetaClass,但思路是一样的
def getStaticAttributeWithValue(Class clazz, Object searchedValue) {
clazz.metaClass.properties
.findAll{ it.getter.static }
.find { clazz[it.name] == searchedValue }
}

这样你会得到一个 groovy.lang.MetaBeanProperty反而

关于Grails 检查一个类是否有一个具有特定值的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33186842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com