Class 类的Grails初始化
我有一个关于groovy/grails初始化的问题。当我有以下类时,sInstance不会被传递到SService初始化中Class 类的Grails初始化,class,grails,groovy,initialization,Class,Grails,Groovy,Initialization,我有一个关于groovy/grails初始化的问题。当我有以下类时,sInstance不会被传递到SService初始化中 class A { String sInstance String app String dbInstance SService s = new SService(sInstance:sInstance, app:app) } 服务类别: class SService { String sInstance String
class A {
String sInstance
String app
String dbInstance
SService s = new SService(sInstance:sInstance, app:app)
}
服务类别:
class SService {
String sInstance
String app
public getSInstance{
return sInstance
}
}
这将返回null,其中
class A {
String sInstance
String app
String dbInstance
public initializeSService{
SService s = new SService(sInstance:sInstance, app:app)
}
}
从SService类返回sInstance变量
这是为什么?我如何使用类A构造函数初始化SService对象?您不能这样做:
class A {
String sInstance
String app
String dbInstance
SService s = new SService(sInstance:sInstance, app:app)
}
问题是,当您创建SService实例时,sInstance尚未初始化。如果您想从类内将sInstance传递给其他类的构造函数,则必须在sInstance被赋值后进行传递,就像完全构造a后调用的方法一样
编辑:
试图从下面的评论中澄清一些事情:
class A {
String sInstance
String app
String dbInstance
void anyMethod() {
// this will work as long as you have initialized sInstance
SService s = new SService(sInstance:sInstance, app:app)
}
}
根据您真正想要做的事情,可能是朝着这个方向:
class A {
String sInstance
String app
String dbInstance
SService s
void initializeS() {
if(s == null) {
// this will work as long as you have initialized sInstance
s = new SService(sInstance:sInstance, app:app)
}
}
}
或:
如果我使用另一个方法(在完全构造了之后),那么我就不能将其作为类变量访问。如何将其构造为类变量?为什么您不能在方法内部访问它?
A
中定义的任何方法都可以访问A
中定义的所有字段和属性。如果我执行“def startService()”并将对SService的初始化调用放在其中,则在另一个方法中,我无法访问我创建的服务。我得到以下错误消息:如果您将SService声明为类中的一个字段,那么您会这样做。请参阅我上面的示例,其中包含一个名为服务的字段。请参阅服务的某些方法。
class A {
String sInstance
String app
String dbInstance
SService theService
SService getTheService() {
if(theService == null) {
// this will work as long as you have initialized sInstance
theService = new SService(sInstance:sInstance, app:app)
}
theService
}
def someMethodWhichUsesTheService() {
getTheService().doSomethingToIt()
}
}