我在某处看到了这种模式:
class A extends B<A> {
}
通过将新类型指定为泛型的实际类型来扩展泛型,此结构有点不寻常。有什么用?此模式有名称吗?有其他替代方式吗?
示例:https://code.google.com/p/selenium/wiki/LoadableComponent
跳到: public class EditIssue extends LoadableComponent<EditIssue> {
编辑:阅读响应后,似乎我需要改变编译器对类型检查的理解。在我的脑海中,我有这种模式的牛肉是,如果两个A需要相同,那么有没有办法不重复它们?但是似乎没有更好的方法可以将派生类的类型传播给父类。
当然OOP的答案是,A
是B
。如果A
不是一个B
,A
则仅应B
使用B
的功能来构成自己。
大概B
也有一些通用的实现,它们利用了对通用类型的限制。
另一个用例是B
看起来像这样:
abstract class B<T extends B<T>> {
public T createCopy(T t);
}
现在,子类可以实现,createCopy
并且客户端代码可以安全地使用它,而无需强制转换…例如
class A extends B<A> {
public A createCopy(A t) {
return new A(t); //copy constructor
}
}
比较以上内容:
abstract class B {
public B createCopy(B t);
}
class A extends B {
public B createCopy(B t) { //Is the copy an A or a different subtype of B? We don't know.
return new A(t); //copy constructor
}
}
问题内容: 抱歉,标题似乎令人困惑,但请按示例进行操作。 假设我有一些带有通用类型参数的Java类: 我可以创建一个类型为存储对象的变量,并将通用参数设置为。Java还允许我将该变量分配给另一个变量,但将通用参数设置为通配符类型: 但是,在使用具有泛型参数的类时,如果将该参数的类型设置为泛型,则无法将该类的对象分配给相同类型/泛型的类型,后者(内部/嵌套)参数是通配符类型: 具体的编译错误是: 凭
问题内容: 我想为此创建一个扩展名,仅影响… 我了解这些说明是相关的,但不确定如何: 扩展通用类型时,不提供类型参数列表作为扩展定义的一部分。而是在扩展程序的正文中提供原始类型定义的类型参数列表,并且原始类型参数名称用于引用原始定义的类型参数。 基本上,我正在尝试使用此方法: 在没有参数的情况下采取行动…这可能吗? 问题答案: Swift 3.1更新 从Swift 3.1(Xcode 8.3 be
问题内容: Java是否可以让类扩展泛型,以便您可以将方法注入通过代码传递的任何类中?(或者是否有其他方法可以使用Java将方法注入或重写到现有类中?) 我所说的“扩展通用类型”是这样的(类“ Textended GameObject”属于游戏,可能不会更改,并且是未知的,因为它是在运行时(从其他mods)加载到游戏中的): onTick由GameEngine调用,通过这种方式,我可以将每个现有的
你好打字专家们, 有人可以解释为什么下面的代码在第 16 行给我一个错误,而不是在第 13 行给我一个错误。这是预期功能还是缺少功能? 密码 游乐场链接
问题内容: 如果我要创建一个泛型的Java类,例如: 如何才能内部确定该类,最后变成什么“ T”? 我戳了一下Java API并使用了反射的东西,instanceof,getClass,.class等,但是我似乎无法做出决定。我觉得我已经接近了,只需要合并多个电话,但会持续很短的时间。 更具体地说,我试图确定是否用3种可能的类型之一实例化了该类。 问题答案: 我在他的一些项目中使用了与他在此处解释
6.3. 通过嵌入结构体来扩展类型 来看看ColoredPoint这个类型: gopl.io/ch6/coloredpoint import "image/color" type Point struct{ X, Y float64 } type ColoredPoint struct { Point Color color.RGBA } 我们完全可以将ColoredPoin