我有通用类:
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和DogService扩展这个抽象服务。 他们将在构造函数中调用 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/