Создайте абстракцию операций, которые вы хотите выполнить над вашими объектами, например, создав интерфейс. Затем вы можете позаботиться о том, как обеспечить реализацию реальной логики.
Обычно при работе с коллекциями объектов, скажем, типа User, будет не сам пользователь, который его реализует, а другой объект, например, UserService. Если абсолютно необходимо, чтобы он был доступен на уровне класса, вы можете определить статический метод, который возвращает тип интерфейса и реализацию по умолчанию.