Как я могу сослаться на класс типа интерфейса реализуется на Java?

У меня возникла проблема с интерфейсами в создаваемой мной программе. Я хочу создать интерфейс, один из методов которого будет получать / возвращать ссылку на тип собственного объекта. Это было примерно так:

public interface I {
    ? getSelf();
}

public class A implements I {
    A getSelf() {
        return this;
    }
}

public class B implements I {
    B getSelf() {
        return this;
    }
}

Я не могу использовать «Я» там, где стоит «?», Потому что я хочу возвращать не ссылку на интерфейс, а на класс. Я поискал и обнаружил, что в Java нет возможности "самореференции", поэтому я не могу просто заменить это "?" в примере для ключевого слова "self" или чего-то подобного. На самом деле, я пришел к решению, которое похоже на

public interface I<SELF> {
    SELF getSelf();
}

public class A implements I<A> {
    A getSelf() {
        return this;
    }
}

public class B implements I<B> {
    B getSelf() {
        return this;
    }
}

, но на самом деле это похоже на обходной путь или что-то подобное. Есть ли другой способ сделать это?

19
задан Peter Mortensen 18 February 2016 в 19:14
поделиться