Java 实现没有类型参数的泛型接口

Java 实现没有类型参数的泛型接口,java,generics,interface,Java,Generics,Interface,假设我有一个带有泛型类型的接口A: public interface A<T> { T getT(); } …但不提供类型参数 这里发生了什么?是否将A推断为A?是否可以强制用户使用implements语句(如B implements A)写入类型参数 这里发生了什么 因为您将接口实现保留为原始类型,所以返回类型必须是Object。它不会推断返回类型,但是如果您的返回类型是Object,这是Java中的每个对象,那么它可以正常工作 是否可以强制用户使用implements语

假设我有一个带有泛型类型的接口
A

public interface A<T> {
    T getT();
}
…但不提供类型参数

这里发生了什么?是否将
A
推断为
A
?是否可以强制用户使用
implements
语句(如
B implements A
)写入类型参数

这里发生了什么

因为您将接口实现保留为原始类型,所以返回类型必须是
Object
。它不会推断返回类型,但是如果您的返回类型是
Object
,这是Java中的每个对象,那么它可以正常工作

是否可以强制用户使用implements语句编写类型参数(如B实现A)

是否强制用户键入?计算机功能强大,但精神控制还有一段距离。

好吧,实现class
B
的“正确”方法是:

public class B implements A<Integer> {
    @Override
    public Integer getT() {
        return 1;
    }
}
公共类B实现了{
@凌驾
公共整数getT(){
返回1;
}
}
以这种方式编写类
B
后,您将强制用户仅将该类与
Integer
类型一起使用

如果缺少泛型说明符(如您的示例中所示),则会编译代码(因为泛型是擦除),但大多数IDE会产生警告(例如,在Eclipse中,警告是“A是原始类型。对泛型类型A的引用应参数化为B.java”

这里发生了什么? 因为Integer扩展了对象,所以它可以正常工作,建议您使用 实施你的问题:

这里发生了什么

由于省略了泛型类型,系统将其推断为
Object

    public class B implements A<Object> { 
        ...
    }
公共类B实现了一个{
...
}
下一个问题:

是否可以强制用户使用工具(如B实现A)写入类型参数

是的,这就是:

    interface A<T extends Integer> 
接口A

希望这能有所帮助。

@johnchen902当我看到“中国人”之前的“a”时,我以为你会大肆宣扬种族主义,在我意识到你是中国人之前:P@johnchen902这有点离题了:p但是是的,台语是准确的。事实上我和你上的是同一所高中。我不想控制用户的思维哈哈。我的意思是我可以通过
接口a
强迫用户给它一个扩展
Foo
的类型“它会很好用”-但是
B
A
而不是
A
,这有一些含义。呃,我不是OP,但这并不能回答“这里发生了什么?”总之。呃,这是java“类型擦除”,我想写很多,但英语不好,所以很抱歉,你可以用谷歌搜索,我想你可以找到真正的最终细节:
public Integer getT()…
在上面的
T
对象
,因为
    interface A<T extends Integer>