Java 你能参考一下';这';类作为泛型参数?
我有几次遇到了一点问题,我想做这样的事情:Java 你能参考一下';这';类作为泛型参数?,java,generics,Java,Generics,我有几次遇到了一点问题,我想做这样的事情: interface MyInterface { public Validator<this.class> getValidator(); } class MyInstance implements MyInterface { public Validator<this.class> getValidator() { //do stuff } } interface M
interface MyInterface
{
public Validator<this.class> getValidator();
}
class MyInstance implements MyInterface
{
public Validator<this.class> getValidator()
{
//do stuff
}
}
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{
验证器您想要的是不可能的
原因与无法将列表
分配给列表
的原因相同
如果您想要的是可能的,您可以有一个实现:
class MyInstance implements MyInterface
{
public Validator<MyInstance> getValidator()
类MyInstance实现MyInterface
{
公共验证器getValidator()
但是,在您的界面中,getValidator()
的返回类型被“定义”为Validator
(因为this.class
在界面上下文中引用了MyInterface
)
您不能将验证程序
分配给验证程序
这样做的原因是,如果您可以这样做,您可以有另一个类返回一个验证器,您也可以将它分配给验证器。然后当您尝试调用验证器上的方法时,您现在不知道它是接受MyInstance
还是MyTheInstance
obj的类ects.我不确定这个.class
应该代表什么。它应该代表类吗?我不理解你的问题,我的意思是它应该引用扩展MyInterface的具体类,所以在这种情况下它应该是MyInstance,但是如果另一个类(比如说AnotherInstance),extended MyInterface,getValidator()
将返回一个验证器,如前所述,这也是链式方法的一个问题,因此假设您想将StringBuilder扩展为一个新类ErrorBuilder
,并添加另一个链式方法,比如说appendError()
,如果您这样做了new ErrorBuilder()。appendError(“Error”).append(“Here”)
可以正常工作,因为appendError()
将返回一个ErrorBuilder
类,但是如果执行了newerrorbuilder().append(“Here”).appendError(“Error”)
它会失败,因为append返回一个StringBuilder!如果您可以有一个像public this.class append(String x)
这样的签名,这将非常理想。答案不能解决问题,因为无法解决您的问题。您想要的是Java类型系统中的类型安全。请参阅我的答案。