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{
,will
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
的子类型,也可以是
 条形码本身。我很困惑:
(使用关键字extends有点误导:回想一下第26项,子类型的定义是这样的,即每个类型都是它自己的子类型,即使它没有扩展自己。)
-有效的Java(我的Kindle中的第134页)在回答的第一部分:
公共类Baz实现了Foo{
,将
Baz#get()
仅返回
Bippie
类型?或者
Bar
将是可接受的返回类型,因为
公共接口Foo{Optional get()…}
?它必须是一个
可选的
,因为
Baz
S
Foo
定义为
Bippie
。啊,所以在实现
Foo
接口时,
Foo
的类型参数必须是
Bar
的子类型。它可以是
Bar
的子类型,也可以是
 条形码本身。我很困惑: