|
3
|
| Denys Kniazhev-Support Ukraine · 技术社区 · 15 年前 |
|
|
1
5
你的基类应该是:
您没有使用t,而是使用Number类作为参数。 |
|
|
2
2
您应该将抽象类实现更改为将类型T作为参数。 |
|
|
3
2
为什么超类方法没有定义为
? |
|
|
4
1
想象中的班级发生了什么。
这个类有一个泛型参数(T),它必须扩展Number类并实现接口MyInterface 您还尝试重写不存在的方法,因为该类不扩展其他任何类。当类实现接口时,不需要重写接口方法,因为它只是描述。 如果我们删除@override注释会怎么样。
在这种情况下,我们 从接口实现方法,但创建一个新的方法,此方法参数是与T类型相同的数字,如果类有两个相同的方法,则可能会导致一些错误。(未经编译器测试)
当您指定类型时,在重写此方法时调用此方法不会有问题
|
|
|
5
0
正如其他同事指出的,问题的原因是父方法的签名不正确。强制转换工作的原因是编译器处理泛型的方式。它保证在使用泛型时不会出现运行时ClassCastException问题,但只有在不进行转换时才会出现。一旦你这样做了,你实际上说编译器闭嘴,因为你更清楚你的类型到底是什么。但是在这之后,您可能会在运行时获得ClassCastException(在本例中我假设不是这样) |
|
|
matt · 为什么在使用泛型参数时可以进行强制转换,而在指定了参数后则不能 11 月前 |
|
|
Pavel Foltyn · 如何在C中生成逆字典# 1 年前 |
|
Daniel · C#编译器在应该出错时失败 1 年前 |