2
|
Matt Mitchell · 技术社区 · 16 年前 |
![]() |
1
9
你试过直击吗
使用Java 5,您可以声明具有共变返回类型的重写方法,这就意味着这一点:子类可以具有更具体的返回类型的重写方法签名。 |
![]() |
2
6
为什么不让他们都返回一个接口?您必须在接口中定义所有可能的链接方法,并在基类中提供“空”实现,但是您可以链接到您的核心内容。
注意:上面可能有一些语法问题。过去几年,我主要是用C语言编程的。希望你能理解。 |
![]() |
3
2
我让它这样工作。它使用一个类文本来表示在运行时要强制转换到什么类型(参见第8节 Gilad Bracha's Generics Tutorial ) public class Chainer { public <T extends Chainer> T doStuff (Class<T> foo) { /* do stuff */ return foo.cast (this); } } public class ChainerExtender extends Chainer { public <T extends ChainerExtender> doOtherStuff (Class<T> foo) { /* do other stuff */ return foo.cast (this); } } 所以电话是这样的: Chainer c1 = new Chainer(); c1 = c1.doStuff (c1.getClass()); // ... ChainerExtender ce1 = new ChainerExtender(); ce1 = ce1.doStuff (ce1.getClass()).doOtherStuff (ce1.getClass());
这种技术的一个缺点是,如果你有
|
![]() |
4
1
你能不能发布一个完整的例子来说明你看到的错误信息? 我只是编译并执行了以下内容,没有任何障碍:
给予:
我误解了这个问题,请投反对票并发表评论。 |
![]() |
5
1
自从我做过任何Java泛型以来,已经有一段时间了。 如何: <T> public class Chainer { public T doStuf() { } } public class ChainerDerived : extends Chainer<ChainerDerived> { public ChainerDerived doStuf() { } } 我最近大部分都在做C++,这类东西只是课程的标准。Java泛型支持这种类型的结构吗? 我希望我理解你的问题。 |
![]() |
6
1
请注意,“super.<a>dostuff()”将编译 和 工作。它提示了您所期望的类型的泛型。 |
![]() |
7
1
我认为简单的答案是“不,你不能”。我知道这可能是多么有用,但我觉得继承的使用对我来说是“意想不到的后果”。一个人决定在子类中添加一些额外的功能只是时间问题,而不仅仅是
一个可能的解决方案是为您的链子(如果他们使用
建设者
模式)返回不同生成器类的新实例,而不是
|
![]() |
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 2 年前 |
![]() |
milczi · Swift通用无强制展开向下投射 6 年前 |
![]() |
bugs · Typescript-泛型类型扩展自身 6 年前 |
![]() |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 6 年前 |
![]() |
Blankdud · 具有默认数据的通用对象创建方法 6 年前 |
![]() |
Tim Hutchison · 从泛型对象列表中读取泛型值 6 年前 |