Java 在groovy中定义类型为的变量

Java 在groovy中定义类型为的变量,java,groovy,Java,Groovy,这有效吗 def CallableStatement st try { ... st = sqlConn.prepareCall("call....") ... } 我真正担心的是,您能否同时指定类型和使用def 这有效吗 def CallableStatement st try { ... st = sqlConn.prepareCall("call....") ... } 是与否 是的,因为编译器将愉快地编译和执行上面的代码,但不是,因为将某个类型键入

这有效吗

def CallableStatement st

try {
 ...     
 st = sqlConn.prepareCall("call....")
 ...
}
我真正担心的是,您能否同时指定类型和使用def

这有效吗

def CallableStatement st

try {
 ...     
 st = sqlConn.prepareCall("call....")
 ...
}
是与否

是的,因为编译器将愉快地编译和执行上面的代码,但不是,因为将某个类型键入为
def
并将其指定为显式类型确实没有任何意义。基本上,您所说的是“这可以有任何类型,但必须是
CallableStatement
”。在我看来,上面的定义应该会产生一个编译器错误

实际上,这一定义:

def CallableStatement st
似乎与以下内容相同:

CallableStatement st
如下所示:

class Foo { 
  def List l;
}


new Foo().l = new ArrayList()  // this works
new Foo().l = "ddd"  // this throws a GroovyCastException