作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
class TestClass <T extends SuperClass>{
public List<T> doSmth(){
///....
List testObjects = []
testObjects.add(new T(arg))
return testObjects;
}
}
class SuperClass{
}
class A extends SuperClass{
A(Arg arg){
....
}
class B extends SuperClass{
B(Arg arg){
....
}
////////test
class Main{
List <A> a
List <B> b
Main(){
this.a = new TestClass<A>().doSmth()
this.b = new TestClass<B>().doSmth()
}
}
testObjects.add(new T(arg))
最佳答案
你的代码不工作的原因是不匹配 A
的构造函数和 B
.原因是缺少接受字符串的构造函数 SuperClass
. new T()
不像你期望的那样工作。在你的代码中它变成 new SuperClass(arg)
.下面的代码演示了它
class TestClass <T extends SuperClass> {
public void doSmth(){
println new T().class.simpleName;
}
}
class SuperClass{}
class A extends SuperClass{}
class B extends SuperClass{}
new TestClass<A>().doSmth()
new TestClass<B>().doSmth()
new TestClass<String>().doSmth() //even this works
SuperClass
SuperClass
SuperClass
TestClass <T>
将打印
Object
.
TestClass <T extends A>
将打印
A
等等。
new TestClass<String>()
)。但它保留了一些信息来制作
new T()
工作。
Java's generics implementation incorporates a feature known as "type erasure" which "throws away" generic type information after completing static type checking. This allows Java to easily integrate with legacy "non-generics" libraries. Groovy currently does a little further and throws away generics information "at the source level". Generics information is kept within signatures where appropriate http://web.archive.org/web/20150102195947/http://groovy.codehaus.org/Generics
关于generics - <T extends SuperClass> 的 Groovy 泛型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36371166/
我是一名优秀的程序员,十分优秀!