在groovy中T和def的区别是什么?

时间:2016-12-30 20:31:38

标签: groovy

我之前正在使用一些SQL让我想知道这两种类型之间有什么区别。

在我的示例中,我有2个GroovyRowResults - pastData和currentData。现在,我需要比较这些结果集中的2个点。这些值都应该是不确定的类型。因此,在定义它们时,

之间的区别是什么
def pastResult = pastData[commonKey]
def currentResult = currentData[commonKey]

if(pastResult == currentResult){
    doSomething()
}

T pastResult = pastData[commonKey]
T currentResult = currentData[commonKey]

if(pastResult == currentResult){
    doSomething()
}

2 个答案:

答案 0 :(得分:1)

我假设先前已在您的方法/类中声明了handleClick(e) { this.refs[this.props.name].focus(); return this.props.onClick(this.props.name); } 。在这种情况下,它是genericT一致地引用相同类型的对象,而T基本上只是def的别名。

T不保证两个对象是完全相同的类(它们可能只是实现相同的接口,或者可能是一个子类),它确实在您正在处理的对象中创建了更多的契约。如果将相同类型的对象传递给方法,则没有区别,但如果传递不同或意外的类型,则更有用。

换句话说,在Groovy中,它是为了可读性和一致性而做的,使用泛型比使用动态类型要好得多。

答案 1 :(得分:0)

我不认为第二个例子会起作用,除非有某种叫做T的对象。检查这个链接 http://groovy-lang.org/semantics.html#_variable_definition