I have a utility class for interacting with the Datastore (GAE's in-built Datastore in my case) and it has methods like:

```
//Class GaeDataUtil
public static <T> Optional<Key<T>> saveEntity(T entity)

```

(`Optional` is from the Guava library and `Key<T>` from Objectify, although I doubt any of this makes a difference.)

I want my (minimal) hierarchy of entities to have a `.save()` method. So that for:

```
public class User extends RootEntity

```

where `RootEntity` provides:

```
public Optional<Key<T>> save() {
    //Skipping the error-handling.
    return GaeDataUtil.saveEntity(this);
}

```

I can write:

```
User myUser = new User();
// set some properties
Optional<Key<User>> optKey = myUser.save();

```

But of course that doesn't work because a call to `myUser.save()` returns `Optional<Key<RootEntity>>` not `Optional<Key<User>>` as I want.

I can avoid this issue by typecasting in `User.save()` (and `Account.save()` and `Project.save()` etc. etc.) and suppressing warnings, but even if there are only (say) 10 entity classes extending `RootEntity`, that's still a fair bit of boilerplate code to write *just to typecast*. Also, I think that much of the benefit of having a class hierarchy is lost if I have to write code (however minimal) for every derived class (there will be other, similar methods too).

Is there a better solution to this?

**Update:** using Java 7.