在实验三中,我们设计了一个类Vote用来表示一张选票,其定义如下图所示:
它使用了一个泛型C,指代投票时的候选人类型 。C是一个的变量,我们可以把他当作或者来思考 。
然后我们写出Vote的构造方法如下:
此构造方法传入参数是一个投票项的集合 。我们可以发现,同样是一个包含了泛型C的类,当时没有注意这点,因此在后面使用该构造方法时产生了混淆 。
这是最开始时我犯下的错误,注意红框中的内容,这一行代码并没有报Error,而只有一个 。在实例化一个像Vote这样的含泛型的类时,我们需要用来指定泛型的类型,否则将生成一个Raw Type,而等式左边又指定了泛型的类型,因此编译器将给出一个的 。很多人会忽略在编写代码时产生的,这其实是一个不太好的习惯,例如在这里事实上代码已经产生了我们期望之外的结果:我们希望泛型的类型是,但结果却是 。如果我们忽视这个继续写代码的话,之后我们就会发现错误不可避免地发生了(如上图红色箭头所指向的位置) 。
这是第二种错误,我尝试在右边的Vote后面用>来避免Raw Type的,结果产生了一个Error,报错显示Theis。原因是等式右边紧接着Vote的中,将泛型设置为了,因此构造方法中的参数类型应当是>,与的类型不符 。这个错误实际上与第一个本质相同,不过更早地产生了Error,有助于我们发现代码错误的位置 。
接下来是正确的写法:
【哈工大软件构造实验三 使用Vote类的构造方法时遇到的错误】我们要设置的泛型C是的类型,而不是的类型 。在这里它应当是,修改之后,代码不再有任何或 。上图中我们采用了省略的写法,完整的写法是Vote item = new Vote();这两者没有任何区别 。
通过这次错误,我认识到重视编译器给出的也很重要,即使它们有时候不影响程序的编译和运行,但它们往往暗示了潜在的错误或缺陷 。
- 超赞的EPUB阅读软件推荐
- AI洗稿软件推荐:三款好用精选
- 使用这款免费的洗稿软件究竟是好还是坏
- MT4跨平台多账户跟单管理软件
- chk文件怎么恢复?chk文件恢复软件哪个好?
- 计算机平台,计算机平台的构成,计算机软件的五粗是哪个
- 软件技术开发和了解:探索数字世界的无限潜力
- 程序员必备软件转载自 www.uhdesk.com
- i18n 国际化
- 渗透前戏:Sparta简介