我遇到过这样的Java代码:

public interface Foo<E> {}

public interface Bar<T> {}

public interface Zar<?> {}

以上三种声明之间的区别是什么?它们在Java中称这种类型的类或接口声明为什么?

推荐答案

前两者之间没有区别——它们只是对type parameter(ET)使用了不同的名称.

第三个不是有效的声明——?用作wildcard,在提供类型argument时使用,例如List<?> foo = ...表示foo指的是某个类型的列表,但我们不知道是什么.

所有这些都是generics,这是一个相当大的话题.您可能希望通过以下资源了解它,当然还有更多资源:

Java相关问答推荐

无法在Java中将hhmmss格式的时间解析为LocalTime

如何使用解析器组合子解析Java数组类型签名?

强制Mockito返回null而不是emtpy list

Java Stream,需要更新列表对象列表

neo4j java驱动程序是否会在错误发生时自动回滚事务?

JavaFX Maven Assembly插件一直打包到错误的JDK版本

Spring Boot@Cachebale批注未按预期工作

存根基类的受保护方法

我不能再在Android Studio Hedgehog上用Java语言创建新项目了吗?

无法使用ApacheSpark依赖项构建JavaFX应用程序

OpenGL ES 3.0-纹理黑色

RestTemplate Bean提供OkHttp3ClientHttpRequestFactory不支持Spring Boot 3中的请求正文缓冲

Maven-Dependency-Plugin 3.6.+开始查找在依赖关系:分析目标期间找到的新的使用的未声明依赖关系

使用@ExceptionHandler的GlobalExceptionHandler还是来自服务器的REST应答的ResponseEntity?

如何在Spring Boot Auth服务器上正确配置CORS?

如何在单元测试中获得我的装饰Mapstruct映射器的实例?

如何用Micrometer&;斯普肯

Eureka客户端无法使用用户/通行证注册到Eureka服务器

如何调查进程列表中不可见的活跃 MySQL 事务?

Spring Boot应用程序中的自定义constraintvalidator不会被调用