需要理解语法类Builder <T extends Builder <T >>

San*_*ati 1 java generics

我正在关注"Effective Java"中的示例,并遇到以下代码:

abstract static class Builder<T extends Builder<T>>
Run Code Online (Sandbox Code Playgroud)

及其实施:

public static class Builder extends Pizza.Builder<Builder>
Run Code Online (Sandbox Code Playgroud)

为什么这是宣布T extends Builder<T>而不是T extends Builder.是否真的需要添加模板<T>?如果我只是使用会有什么影响Builder<T extends Builder>

snr*_*snr 5

它被称为"通用类型".该声明意味着T可以是任何类型的子类Builder<T>.

实现泛型的目标是在编译时发现错误,而不是在运行时.在编译时查找错误可以节省调试java程序的时间,因为编译时错误更容易查找和修复.

如果我们使用会有什么影响Builder<T extends Builder>

它转换为原始类型.类型安全性也随之消失.

Builder<T extends Builder<T>> 意思是,

T传入的类必须实现Builderinterface/extend Builder类,并且泛型参数Builder必须是T自身.