java – 你能引用’this’类作为通用参数吗?

参见英文答案 >
Is there a way to refer to the current type with a type variable?                                    7个

我有几次遇到一些问题,我想做这样的事情:

interface MyInterface
{
    public Validator<this.class> getValidator();
}

class MyInstance implements MyInterface
{
     public Validator<this.class> getValidator()
     {
          //do stuff
     }
}

因此,为了能够将对具体类的引用作为泛型参数传递,当您具有作用于当前类的类时,通常需要它.一个简单的解决方案是使用?类型,但是当你需要访问类本身的值时(例如,如果你需要执行类似getValidator().validateForm().getField())或者即使你想用链接子类化一个类,它也不是理想的方法(如StringBuilder.append())

我通常不得不这样做:

interface MyInterface<T>
{
    public Validator<T> getValidator();
}

class MyInstance implements MyInterface<MyInstance>
{
     public Validator<MyInstance> getValidator()
     {
          //do stuff
     }
}

但这很难看,并且很容易意外地将错误的类作为参数.

这个还有其他解决方案吗?

编辑:“有没有办法用类型变量引用当前类型?”提供的答案?目前还没有解决这个问题(除了Scala答案)

最佳答案 我不相信除了你的“平常”之外还有其他任何方式来获得你所追求的.

但是,作为替代方案,您可以考虑考虑:

interface MyInterface {
    Validator<? extends MyInterface> getValidator();
}

其中MyInterface还定义了验证器所需的访问器方法. (请注意,MyInstance的实现仍然可以返回Validator< MyInstance>.)

visitor pattern可能是另一种改变设计的方法来解决这个问题.

点赞