例如,我有一些类:
public class Test<T> {
public T setField() {
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这是一个不正确的课程.但我可以写一些吗?(它没有错误).PS我知道我可以编写一个抽象方法来覆盖子类中的它.但我只询问泛型类(仅在其类体中).
如果要返回类(this)的实例,只需使用类声明(Test<T>)即可:
public Test<T> setField() {
return this;
}
Run Code Online (Sandbox Code Playgroud)
如果要返回一种通用参数,请查看@wero的答案.
T仅当您使用递归类型绑定时,将其强制转换为才有意义。您仍然需要添加演员表并取消警告:
abstract class Test<T extends Test<T>> {
@SuppressWarnings("unchecked")
public T setField()
{
return (T)this;
}
}
Run Code Online (Sandbox Code Playgroud)
定义派生类,如:
public class DerivedTest extends Test<DerivedTest> { ... }
Run Code Online (Sandbox Code Playgroud)
现在无需在客户端代码中进行任何强制转换即可工作:
DerivedTest d = new DerivedTest().setField();
Run Code Online (Sandbox Code Playgroud)