Самосвязанный универсальный тип с плавным интерфейсом и наследованием

Я использую свободный интерфейс с наследованием. Я объявил конструктор базового класса защищенным, поэтому вы не можете создать Foo , что приведет к исключению ClassCastException при вызове add (). Но у меня проблемы со статическим методом, который возвращает новый экземпляр 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>
9
задан Stefan 31 October 2011 в 21:04
поделиться