我有一点问题了几次,我想要做这样的事情:你可以引用'这个'类作为一个通用参数吗?
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
}
}
,但是那是相当难看,而且很容易不小心把错误的类作为参数。
这个还有其他解决方案吗?
编辑:所提供的答案,“有没有办法来指代当前类型与类型的变量?目前并没有解决这个问题(除了斯卡拉的答案)
我不确定'this.class'应该代表什么。它应该代表“类”吗?我不理解你的问题 –
我的意思是它应该引用扩展MyInterface的具体类,所以在这种情况下它应该最终成为MyInstance,但是如果另一个类(比如AnotherInstance)扩展了MyInterface,getValidator() ''会返回一个如前所述的Validator –
FuzzyJulz
,这对于链接方法也是一个问题,所以想象一下你想将StringBuilder扩展为一个新类'ErrorBuilder',并添加另一个链接方法,比如'appendError()',如果你做'新的ErrorBuilder()。appendError(“Error”)。append(“Here”)'那会工作正常,因为'appendError()'会返回一个'ErrorBuilder'类,但是如果你做了'new ErrorBuilder ).append(“Here”)。appendError(“Error”)'它会失败,因为append返回一个StringBuilder!如果你的签名像'public this.class append(String x)' – FuzzyJulz