I have a small program.
interface Store<T extends Base> { void add(T t); Simple<T> getStore(); boolean delete(T t); boolean update(T oldObj, T newObj); } class UserStore implements Store<User> { private Simple<User> users = new SimpleArray<>(); @Override public void add(User user) { users.add(user); } public Simple<User> getStore() { return users; } @Override public boolean delete(User user) { for (int i = 0; i < users.getSize(); i++) { if (user.getId().equals(users.get(i).getId())) { users.delete(i); return true; } } return false; } @Override public boolean update(User oldObj, User newObj) { for (int i = 0; i < users.getSize(); i++) { if (oldObj.getId().equals(users.get(i).getId())) { users.update(i, newObj); return true; } } return false; } } class RoleStore implements Store<Role> { private Simple<Role> roles = new SimpleArray<>(); @Override public void add(Role role) { roles.add(role); } public Simple<Role> getStore() { return roles; } @Override public boolean delete(Role user) { for (int i = 0; i < roles.getSize(); i++) { if (user.getId().equals(roles.get(i).getId())) { roles.delete(i); return true; } } return false; } @Override public boolean update(Role oldObj, Role newObj) { for (int i = 0; i < roles.getSize(); i++) { if (oldObj.getId().equals(roles.get(i).getId())) { roles.update(i, newObj); return true; } } return false; } } И сам контент для сторов: public abstract class Base { private final String id; Base(String id) { this.id = id; } public String getId() { return id; } } public class Role extends Base { public Role(String id) { super(id); } } public class User extends Base { public User(String id) { super(id); } } The problem is that in the UserStore and RoleStore lot of duplicate code I want to get rid of it with the help of generics, but not how it does not work. But the main thing I want to do is so that I still have the interface Store<T extends Base> . But I cannot write an abstract class UserStore implements Store<T extends Base> {} . And I want to make a general class that instead of specific implementations of User and Role uses <T extends Base> and could work with everyone. Get flexible api and do not duplicate the code but it does not work. Help me please.