Java 在抽象类中使用泛型方法时返回调用类

Java 在抽象类中使用泛型方法时返回调用类,java,generics,abstract,Java,Generics,Abstract,我有一个奇怪的问题,我无法理解。我想这是因为我不熟悉泛型 public abstract class AbstractClass <T extends AbstractClass <T>> { //... public <T extends AbstractClass> T genericMethod(){ //do stuff return (T) this; } } 我想这是一种含蓄的施法方式。我怎样才能使代码更流畅,摆

我有一个奇怪的问题,我无法理解。我想这是因为我不熟悉泛型

public abstract class AbstractClass <T extends AbstractClass <T>> {

   //...

   public <T extends AbstractClass> T genericMethod(){
   //do stuff
   return (T) this;
   }
}
我想这是一种含蓄的施法方式。我怎样才能使代码更流畅,摆脱这个多余的“myClass”?我很确定有一个明显的错误,但我看不出来。

在这段代码中:

//                                this T
//                                   v
public abstract class AbstractClass <T extends AbstractClass <T>> {
//     and this T
//         v
   public <T extends AbstractClass> T genericMethod(){
   //do stuff
   return (T) this;
   }
}
编译器知道第一个
T
是什么-
MyClass
,但不知道第二个
T
应该是什么,所以它只使用上界-
AbstractClass
。但是
AbstractClass
中没有
anotherMethod
,因此出现错误

您可能只需要一个
T

public abstract class AbstractClass <T extends AbstractClass <T>> {

   public T genericMethod(){
       //do stuff
       return (T) this;
   }
}
公共抽象类AbstractClass{
公共T泛型方法(){
//做事
返回(T)这个;
}
}
在此代码中:

//                                this T
//                                   v
public abstract class AbstractClass <T extends AbstractClass <T>> {
//     and this T
//         v
   public <T extends AbstractClass> T genericMethod(){
   //do stuff
   return (T) this;
   }
}
编译器知道第一个
T
是什么-
MyClass
,但不知道第二个
T
应该是什么,所以它只使用上界-
AbstractClass
。但是
AbstractClass
中没有
anotherMethod
,因此出现错误

您可能只需要一个
T

public abstract class AbstractClass <T extends AbstractClass <T>> {

   public T genericMethod(){
       //do stuff
       return (T) this;
   }
}
公共抽象类AbstractClass{
公共T泛型方法(){
//做事
返回(T)这个;
}
}

谢谢你,伙计!这就解决了问题。你的解释也很有帮助。你说得对,我把一些东西弄混了,有一些太多了。谢谢你,伙计!这就解决了问题。你的解释也很有帮助。你是对的,我弄错了一些东西,有一些太多了。你的案例在类型参数标题下有更多的技巧,但整篇文章值得一读read@pafauk. 谢谢,但您已链接到此页面。:)啊,见鬼。现在应该可以工作了:)您的案例在类型参数标题下有更多技巧,但整篇文章值得一读read@pafauk. 谢谢,但您已链接到此页面。:)啊,见鬼。现在应该可以工作了:)
public abstract class AbstractClass <T extends AbstractClass <T>> {

   public T genericMethod(){
       //do stuff
       return (T) this;
   }
}