当前位置: 首页 > 面试题库 >

通过将新类型指定为通用类型的实际类型来扩展通用类型有什么好处

房新翰
2023-03-14
问题内容

我在某处看到了这种模式:

class A extends B<A> {

}

通过将新类型指定为泛型的实际类型来扩展泛型,此结构有点不寻常。有什么用?此模式有名称吗?有其他替代方式吗?

示例:https://code.google.com/p/selenium/wiki/LoadableComponent

跳到: public class EditIssue extends LoadableComponent<EditIssue> {

编辑:阅读响应后,似乎我需要改变编译器对类型检查的理解。在我的脑海中,我有这种模式的牛肉是,如果两个A需要相同,那么有没有办法不重复它们?但是似乎没有更好的方法可以将派生类的类型传播给父类。


问题答案:

当然OOP的答案是,AB。如果A不是一个BA则仅应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