前几天,我正在查看别人的代码,遇到了引起关注的一行。为简化起见,假设我有一个通用的A类和一个抽象的B类。是否允许以下实例化?如果可以,为什么?
Object obj = new A<? extends B>();
我个人从未见过像上面这样的实例化,尽管有这样的声明:
A<? extends B> obj = null;
肯定会成立。我一直在泛型中使用通配符声明方法参数,所以我可能没有经验。
其实new A<? extends B>()
不编译。自Java 5以来,它一直是非法的。
但是我想你原来的例子是这样的new A<X<? extends B>>()
。后者在Java的最新版本中是合法的。
这个想法是,当实例化一个对象时,类型参数的值可以是任何非通配符类型。? extends B
是通配符类型,因此不允许使用。但X<? extends B>
不是通配符类型,尽管它 具有 通配符类型作为组件。因此,您可以说合法通话new A<X<? extends B>>()
。
如果您以这种方式考虑,则规则是有意义的。最终,它是更基本的规则的副产品,即通配符类型(例如)? extends B
不能是字段或变量的 声明
类型。如果A
定义为
class A<T> {
T value;
}
那么假设new A<? extends B>().value
将是一个 声明为type 的字段? extends B
。由于那是非法的,因此实例化也是如此。但是new A<X<? extends B>>()
没有那个问题。
你好,我正在尝试。我把我的类定义为: 它也被用于其他课程,如: 现在,在我的模块文件()中,我将Foo定义为: 现在,当我运行代码时,GoogleGuice能够找到
Bucket 和 主机名 有两种不同的方式访问 bucket。第一个(首选)方法通过URI中的顶级目录 来确认 bucket 。 GET /mybucket HTTP/1.1 Host: cname.domain.com 第二种方法是通过虚拟的bucket 主机名来确认 bucket。举例如下: GET / HTTP/1.1 Host: mybucket.cname.domain.com Tip
本文向大家介绍Python 通配符删除文件的实例,包括了Python 通配符删除文件的实例的使用技巧和注意事项,需要的朋友参考一下 实例如下所示: 以上这篇Python 通配符删除文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
“帮助系统”一节 脱字符 Shell 中的一些功能是通过特殊符号作为控制字符来实现的,上面已经介绍了很多了。这产生一个问题,如果一个文件名中,刚好包含了这些字符,比如 ; ,就很难对它进行操作。使用 less 浏览这个文件 less ;xxx less 会很快返回一个错误信息,因为并没有一个文件名作为操作对象。接着,Shell 会报告,系统中没有 xxx 这个命令。 这是因为 Shell
本文向大家介绍SQL Server中通配符的使用示例,包括了SQL Server中通配符的使用示例的使用技巧和注意事项,需要的朋友参考一下 在某些情况下熟悉SQL Server 通配符的使用可以帮助我们简单的解决很多问题。 结果集: 结果集:
本文向大家介绍SQL 通配符,包括了SQL 通配符的使用技巧和注意事项,需要的朋友参考一下 示例 通配符与SQL LIKE运算符一起使用。SQL通配符用于在表中搜索数据。 SQL中的通配符为:%,_,[charlist],[^ charlist] % -零个或多个字符的替代 _-代替单个字符 [charlist] -匹配的字符集和范围 [^ charlist] -仅匹配括号中未指定的字符