如何在泛型类中返回`this`?

Шах*_*Шах 2 java generics

例如,我有一些类:

public class Test<T> {
    public T setField() {
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,这是一个不正确的课程.但我可以写一些吗?(它没有错误).PS我知道我可以编写一个抽象方法来覆盖子类中的它.但我只询问泛型类(仅在其类体中).

And*_*lko 8

如果要返回类(this)的实例,只需使用类声明(Test<T>)即可:

public Test<T> setField() {
    return this;
}
Run Code Online (Sandbox Code Playgroud)

如果要返回一种通用参数,请查看@wero的答案.


wer*_*ero 5

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)