参见英文答案 >
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可能是另一种改变设计的方法来解决这个问题.