Java 实现参数化接口
鉴于此接口:Java 实现参数化接口,java,generics,Java,Generics,鉴于此接口: import com.google.common.base.Optional; public interface Foo<S extends Bar> { Optional<S> get(); } 是否有必要将参数置于Baz类?为什么或者为什么不?从技术上讲,保持Baz不变,实现原始Foo接口是合法的。Java将把所有泛型当作它们不存在一样对待,并且代码将被编译 然而,使用原始类型通常不是一个好主意,而且很容易正确实现泛型接口,所以就这样做吧
import com.google.common.base.Optional;
public interface Foo<S extends Bar> {
Optional<S> get();
}
是否有必要将参数置于
Baz类
?为什么或者为什么不?从技术上讲,保持Baz
不变,实现原始Foo
接口是合法的。Java将把所有泛型当作它们不存在一样对待,并且代码将被编译
然而,使用原始类型通常不是一个好主意,而且很容易正确实现泛型接口,所以就这样做吧。您不必在类Baz
上提供泛型类型参数:
public class Baz implements Foo<Bippie> {
public Optional<Bippie> get() {
从技术上讲,实现原始的
Foo
接口,让Baz保持原样是合法的。Java将把所有泛型当作它们不存在一样对待,并且代码将被编译
然而,使用原始类型通常不是一个好主意,而且很容易正确实现泛型接口,所以就这样做吧。您不必在类Baz
上提供泛型类型参数:
public class Baz implements Foo<Bippie> {
public Optional<Bippie> get() {
从技术上讲,实现原始的Foo
接口,让Baz保持原样是合法的。Java将把所有泛型当作它们不存在一样对待,并且代码将被编译
然而,使用原始类型通常不是一个好主意,而且很容易正确实现泛型接口,所以就这样做吧。您不必在类Baz
上提供泛型类型参数:
public class Baz implements Foo<Bippie> {
public Optional<Bippie> get() {
从技术上讲,实现原始的Foo
接口,让Baz保持原样是合法的。Java将把所有泛型当作它们不存在一样对待,并且代码将被编译
然而,使用原始类型通常不是一个好主意,而且很容易正确实现泛型接口,所以就这样做吧。您不必在类Baz
上提供泛型类型参数:
public class Baz implements Foo<Bippie> {
public Optional<Bippie> get() {
可能应该是实现Foo
。遵循IDE的指导,使其参数化,这是您设计的。如果您不想使用泛型,那么为什么要将接口设置为泛型。首先阅读为什么使用泛型?使用泛型的好处是什么?它可能会帮助您直接从上的Oracle官方文档中理解它。泛型通过在编译时检测更多的bug来增加代码的稳定性。可能应该是实现了Foo
。遵循IDE的指导,使其参数化,这是您设计的。如果您不想使用泛型,那么为什么要将接口设置为泛型。首先阅读为什么使用泛型?使用泛型的好处是什么?它可能会帮助您直接从上的Oracle官方文档中理解它。泛型通过在编译时检测更多的bug来增加代码的稳定性。可能应该是实现了Foo
。遵循IDE的指导,使其参数化,这是您设计的。如果您不想使用泛型,那么为什么要将接口设置为泛型。首先阅读为什么使用泛型?使用泛型的好处是什么?它可能会帮助您直接从上的Oracle官方文档中理解它。泛型通过在编译时检测更多的bug来增加代码的稳定性。可能应该是实现了Foo
。遵循IDE的指导,使其参数化,这是您设计的。如果您不想使用泛型,那么为什么要将接口设置为泛型。首先阅读为什么使用泛型?使用泛型的好处是什么?它可能会帮助您直接从上的Oracle官方文档中理解它。泛型通过在编译时检测更多的bug来增加代码的稳定性。在回答的第一部分:public class Baz implements Foo{
,willBaz#get()
仅返回Bippie
类型?或者Bar
是否是可接受的返回类型,因为公共接口Foo{Optional get()…}
?它必须是一个可选的,因为Baz
将S
从Foo
定义为Bippie
。啊,所以在实现Foo
接口时,Foo
的类型参数必须是Bar
的子类型。它可以是Bar
的子类型,也可以是 条形码本身。我很困惑:(使用关键字extends有点误导:回想一下第26项,子类型的定义是这样的,即每个类型都是它自己的子类型,即使它没有扩展自己。)
-有效的Java(我的Kindle中的第134页)在回答的第一部分:公共类Baz实现了Foo{
,将Baz#get()
仅返回Bippie
类型?或者Bar
将是可接受的返回类型,因为公共接口Foo{Optional get()…}
?它必须是一个可选的,因为Baz
将S
从Foo
定义为Bippie
。啊,所以在实现Foo
接口时,Foo
的类型参数必须是Bar
的子类型。它可以是Bar
的子类型,也可以是 条形码本身。我很困惑:(使用关键字extends有点误导:回想一下第26项,子类型的定义是这样的,即每个类型都是它自己的子类型,即使它没有扩展自己。)
-有效的Java(我的Kindle中的第134页)在回答的第一部分:公共类Baz实现了Foo{
,将Baz#get()
仅返回Bippie
类型?或者Bar
将是可接受的返回类型,因为公共接口Foo{Optional get()…}
?它必须是一个可选的,因为Baz
将S
从Foo
定义为Bippie
。啊,所以在实现Foo
接口时,Foo
的类型参数必须是Bar
的子类型。它可以是Bar
的子类型,也可以是 条形码本身。我很困惑: