Я не думаю, что есть какой-либо способ сделать это ни в Java 6, ни в Java 7. Добавление этого было бы непростым - я думаю, что возвращаемый тип будет тем, что называется «зависимым типом», и это что-то изгораздо более сложная система типов, чем в Java в настоящее время.
Ответ Гресси о добавлении параметра типа в базовый класс - это единственный способ приблизиться к тому, что вы хотите, насколько я знаю.
Однако, если вы были готовы использовать вспомогательную функцию, вы могли бы сделать это без параметра типа в классе:
abstract class Entity {
public static <T extends Entity> T detach(T entity) {
entity.detach();
return entity;
}
protected abstract void detach();
}
Тогда вы могли бы сказать:
import static Entity.detach;
detach(fooEntity).doSomeInteresting();
Этодовольно неуклюжий, хотя.