Я использую свободный интерфейс с наследованием. Я объявил конструктор базового класса защищенным, поэтому вы не можете создать Foo
public class Foo<T extends Foo<T>> // if i change to extends Foo i only get warnings
{
public static Foo<Foo> createFoo() // <-- error
{
return new Foo<Foo>(); // <-- error
}
protected Foo() {}
public T add()
{
//...
return (T)this;
}
}
public class Bar extends Foo<Bar>
{
public Bar sub()
{
//...
return this;
}
}
Это в основном упражнение (личное, а не домашнее) по Fluent Interfaces, предметно-ориентированному языку и Generics, поэтому, пожалуйста, не спрашивайте, для чего мне это нужно.
Изменить: ошибка Eclipse
Bound mismatch: The type Foo is not a valid substitute for the bounded parameter <T extends Foo<T>> of the type Foo<T>