У меня есть общий класс:
public class MyGenericClass<T> {
T get(){
return T;
}
...
}
Есть 2 класса:
public class CatService{
MyGenericClass<Cat> generic;
public CatService(MyGenericClass<Cat> generic){
this.generic = generic;
}
}
public class DogService{
MyGenericClass<Dog> generic;
public DogService(MyGenericClass<Dog> generic){
this.generic = generic;
}
}
Думаю лучше создать public abstact class Service:
public abstract class Service {
MyGenericClass generic;
public MyGenericClass (MyGenericClass generic){
this.generic = generic;
}
}
И сделайте CatService и Собачья службапродлевать этим абстрактный сервис. Они инициализируют универсальное поле в конструкторе, вызывая супер (общий MyGenericClass) или супер (общий MyGenericClass).
Но в этом случае, когда я пытаюсь вызвать методы MyGenericClass, я получаю "неотвеченный звонок", когда я пытаюсь вызвать T get(), я должен использовать (Кот) generic.get() ИЛИ (Собака) generic.get();
Можно ли этого избежать?
Обновлено: Необходимо указать общий тип: extends Service<Cat>
public class CatService extends Service<Cat> {
public CatService(MyGenericClass<Cat> generic){
super(generic);
}
}
public abstract class Service<T> {
MyGenericClass<T> generic;
public MyGenericClass (MyGenericClass<T> generic){
this.generic = generic;
}
}
public abstract class Service<T> { MyGenericClass<T> generic;



Также сделайте класс Serviceобщий.
public abstract class Service<T> {
MyGenericClass<T> generic;
public MyGenericClass (MyGenericClass<T> generic){
this.generic = generic;
}
}
Да, что он (Эллиот) сказал
Я пробовал. Это не работает, когда я использую универсальный в DogService или CatService. Все еще есть «незаблокированный вызов».
Вам также необходимо сделать родительский класс службы универсальным.