Java 如何在Groovy脚本中通过注释为字段添加getter来授予对字段的访问权限
我有一个模型类,里面有字段:Java 如何在Groovy脚本中通过注释为字段添加getter来授予对字段的访问权限,java,reflection,groovy,Java,Reflection,Groovy,我有一个模型类,里面有字段: public class Model1 { @Bind private int LL; @Bind private double[] twKI; @Bind private double[] twKS; @Bind private double[] twINW; @Bind private double[] twEKS; } 我创建了一个注释: import java.lang.annotation.ElementType;
public class Model1 {
@Bind private int LL;
@Bind private double[] twKI;
@Bind private double[] twKS;
@Bind private double[] twINW;
@Bind private double[] twEKS;
}
我创建了一个注释:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Bind {
}
是否可以为
Model1
类中的字段定义getter和setter而不进行修改,这样以后它们将在groovy脚本中可用?您有多种选择,可以选择更适合您的:
我们有一个模型对象:model model=newmodel()
1。使用getter和setter:
创建getter和setter方法,然后调用setter方法:model.setLL(10)
2。没有接受者和接受者:
在groovy/grails中,除非您为了某种特定的目的重写它们,否则范围变量不会有太大的区别。因此,您可以使用model.LL=10直接设置该值
3。使用setProperty:model.setProperty('LL',10)
4。反射方式:在设置字段值之前,将其标记为可访问
Field field = Model.getDeclaredField("LL")
field.setAccessible(true)
field.set(model, 10)
您想通过注释处理(构建时;请参阅)自动创建getter setter还是在运行时自动创建getter和setter?@mlk我试图通过反射修改这些字段,如(简化示例):modelClass.getDeclaredField(“LL”).set(model,10)代码>但我得到java.lang.IllegalAccessException:类zad1.Controller无法访问修改器为“private”的类zad1.models.Model1的成员
老师原谅了修改Model1
类,因此我寻找一种方法来定义类外字段的getter。我检查了第四种方法,它已经在field field=model.getDeclaredField(“LL”)
->类控制器无法使用修饰符访问zad1.models.Model1类的成员“私人“
当您尝试设置值时,而不是当您尝试获取字段时,会引发此异常。在将其标记为可访问后,将不会出现此异常。我自己已经验证过了。我知道这是应该发生的事情,在一些教程中也有展示。由于某种原因,我在我告诉你的地方遇到了异常。在我重新打开所有文件后,异常停止抛出。当然,我以前保存过所有文件。一定是Eclipse bug。