Java 如何使用子类类型作为超类上方法的返回?

Java 如何使用子类类型作为超类上方法的返回?,java,generics,design-patterns,conventions,Java,Generics,Design Patterns,Conventions,到目前为止,我能处理返回超类中的子类类型的最好方法是将子类类型作为类型参数传递 但它看起来并不漂亮,所以我需要知道是否有更好的方法来实现这一点 这就是我所拥有的: public abstract class Model<R extends Model<R, ID>, ID extends Serializable> { public R find(ID id) { return find(getClass(), id); } .

到目前为止,我能处理返回超类中的子类类型的最好方法是将子类类型作为类型参数传递

但它看起来并不漂亮,所以我需要知道是否有更好的方法来实现这一点

这就是我所拥有的:

public abstract class Model<R extends Model<R, ID>, ID extends Serializable> {

    public R find(ID id) {
        return find(getClass(), id);
    }

    ...
}

public final class SampleRecord extends Model<SampleRecord, Long> {

    @Id
    private Long id;

}

不,这几乎是Java中的一种规范模式。这很好,而且经常出现。事实上,经常看到C++黑客已经为其提供了一个可爱的名字“好奇的重复模板模式”,或者因为java没有模板之类的东西,所以它应该被声明为类模型。界限是不必要的。