如何从外部获取Class属性值得问题

 

在Grails里,通过定义DomainClass来对业务对象建模,那么在进行代码生成的时候,是如何获得这些模型的呢?

本文做一些初步的探讨。

下面定义一个类:

 

class A{
  static def attr1 = "bar"
   def attr2 = "foo" 
}

通过脚本,如何能获得attr1, attr2的值呢。

 

最简单的方法:

 

def a = new A();

println a.attr1
println a.attr2

 

如果不能实例化呢,可以通过Class获取静态变量值
println A.attr1
println A.metaClass.getJavaClass().attr1
println a.class.attr1

 

如果需要通过动态属性名获取静态变量值的情形呢,用下面的方法
def propName = "attr1"

println A."$propName"
println A.metaClass.getJavaClass()."$propName"
println a.class."$propName"

如果连类都需要动态获得呢,用下面的方法可以

注意这部分需要把类定义文件命名为A.groovy,并通过groovc编译


def clsName = "A"
def propName = "attr1"

def cls = Class.forName(clsName)
println cls.attr1
println cls."$propName"
println cls.metaClass.getJavaClass()."$propName"

 

def a2 = cls.newInstance()
println a2.attr2

 

2008-12-30 ,继续补充一下:

对于属性和方法的访问,Groovy提供的标准接口是MetaObjectProtocol 。

对于本例子,只要能够获得MetaClass,即可通过getAttribute来方便地获取属性值,包括静态和动态的属性。

//获得静态属性值

cls.metaClass.getAttribute(null,'attr1')

//获得非静态属性值

cls.metaClass.getAttribute(a2,'attr2')

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值