java - Java 中的泛型 - 使用抽象类进行类型删除

标签 java generics

我有通用类:

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;
   }
}

并让CatServiceDogService扩展这个抽象服务。 他们将在构造函数中调用 super(MyGenericClass generic)super(MyGenericClass generic) 来初始化泛型字段。

但是在这种情况下,当我尝试调用 MyGenericClass 方法时,我收到“未检查的调用”,当我尝试调用 T get() 时,我必须使用 (Cat) generic.get( )(Dog) 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;
   }
}

最佳答案

也将 Service 类设置为通用

public abstract class Service<T> {
   MyGenericClass<T> generic;

   public MyGenericClass (MyGenericClass<T> generic){
       this.generic = generic;
   }
}

关于java - Java 中的泛型 - 使用抽象类进行类型删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55081423/

相关文章:

java - 如何从客户端 JavaScript 代码访问 Java 列表元素?

java - 调试内部编译器错误 (Java) 以查找有问题的源代码

python - 如何在Python中实现泛型? Java 或 C++ 之类的东西提供

java - Android上的JavaFX-Gradle找不到JDK

java - 删除重新创建的 bean 的元素时,Hibernate 级联删除不起作用

java - JPA 查询.getResultList()?

ruby - ruby 中的模板方法

java - 以编程方式更改 ServletRequest 服务器名称

Swift:覆盖属性类

generics - 创建一个比另一个通用结构通用的结构