1
2
使用自引用类型:
为了避免在客户端代码中完全使用泛型参数,您必须创建第二组泛型类,其固定类型实现为a、B、C等,如下所示:
这里的问题是
|
2
1
自Java5以来,您的代码允许在子类中重写的方法具有协变返回类型。这是什么意思? 这意味着重写方法的返回类型必须是原始方法的子类。这使得子类能够返回属于适当类型而不是父类型的类型。 假设您在a中有一个要在子类B中使用的方法,但您希望它返回一个B实例。使用此模式:
类B重写类A中的方法(如果需要,可以通过调用super.myMethod()来调用它)并返回一个B实例。这是允许的,因为B是a的子类型(在类设计语言中,B-是-a)。 |
3
1
这是一个令人讨厌的问题。无法表示返回类型与调用方法的实例具有相同的类型。我推荐scottb的协变返回类型解决方案。您只需更改的签名
然后在每个子类中用一行重写。E、 g.英寸
如果您不想在每个子类中反复执行此操作,可以使用 静止的 方法。
|
4
1
我相信我已经找到了满足你所有要求的方法。技巧是强制编译器注意到您要调用
为了实现这一点,我使用了一个静态助手方法。请阅读代码中的注释,因为它们解释了所使用的技巧:
如你所见
代价是必须从客户端代码中使用静态助手方法。但是,您不需要使用泛型类型参数或强制转换。 如果您不喜欢或不能采用这种方法,可以使用另一种技巧(同样粗糙,但更容易出错),它不需要静态助手方法:
|
5
0
类的实例
获得运行时错误而不是编译时错误的原因是您忽略了
最终的问题是,你的api宣称返回的对象类型可以由调用者控制,而实际上它是由调用方法的对象类型决定的。 |
6
0
这就足够了吗?我在单元测试中所做的唯一更改如下:
Voici代码:
|
user8144114 · 为商店的产品创建类 6 年前 |
LCaraway · 从列表合并数据集层次结构 6 年前 |
Matt Reichenbach · Excel动态分组/层次结构工具 6 年前 |
krynil · Power双柱状图中的钻取函数-显示日数而不是日期 7 年前 |
ProgrammingCuber · OpenCV层次结构始终为空 7 年前 |
Ashwin · 继承权的平面目录路径 7 年前 |