请不要恨我,是的,我想做一些非常愚蠢的事情。
如果每个属性都不存在,我想获取null
。我发现可以创建propertyMissing
方法:
class User {
String name = "A"
}
Object.metaClass.propertyMissing() {
null
}
u = new User();
println u?.name
println u?.namee
此打印:
A
null
现在,我的背上有了“伟大的” Hybris系统:D
如果我在脚本顶部添加propertyMissing部分并在Hybris groovy控制台中运行它,我仍然会收到MissingPropertyException。
是否有另一种方法可以避免MissingPropertyException异常而无需处理数百个try catch? (或数百个println u?.namee ? u.namee : null
不起作用)
/编辑:1
我有以下用例(对于Hybris系统):
我想从某些页面的动态输出中获取所有必要的信息。为什么动态?某些页面组件具有属性headline
其他teaserHeadline
和其他属性title
。为了避免每次尝试捕获都创建一个函数,我创建了一个循环遍历可能属性的函数,如果该属性为null,则跳过该属性。为此,我需要对不存在的属性返回null。
这是一个应该起作用的示例,但它不能(不要在您的实时系统上运行它):
import de.hybris.platform.servicelayer.search.FlexibleSearchQuery;
import de.hybris.platform.servicelayer.search.SearchResult;
flexibleSearch = spring.getBean("flexibleSearchService")
FlexibleSearchQuery query = new FlexibleSearchQuery("select {pk} from {ContentPage}");
SearchResult searchResult = flexibleSearch.search(query);
def i = 0;
def max = 1;
searchResult.result.each { page ->
if (i < max) {
gatherCMSPageInformation(page)
}
i++;
}
def gatherCMSPageInformation(page) {
page.class.metaClass.propertyMissing() {
null
}
println page.title2
}
奇怪的是,如果我以很小的间隔运行几次,它将开始工作。但是我不能将“ null”覆盖为“ a”之类的东西。我还注意到,覆盖对象类在Hybris中根本不起作用。
/编辑2:
我注意到,我正在与常规的缓存进行斗争。只需尝试第一个示例,将null
更改为a
,然后在相同的上下文中尝试将其再次更改为b
,而无需重新启动系统。
是否有清除缓存的方法?
答案 0 :(得分:0)
为什么不使用Groovy Elvis运算符?
println u?.namee ?: null