背景上下文:
我有一个非泛型类,表示一个复杂的3D模型。我还有一系列标准的3D几何类(Sphere,Cube,长方体),它们都是从抽象类继承的,所以所有的子类都继承相同的字段和函数。因此,每个类都需要能够处理复杂的3D模型类,它不继承抽象类(它不需要相同的字段/函数)。
所以我想用复杂的模型类来使用所有的子类。具体来说,当用户需要时,一个子类可以使用复杂的模型,因此只要用户需要,它就会保存为这个类的字段。复杂类需要访问这些对象的字段和函数,所以我认为使用泛型函数可以应用于所有具有相同字段/函数的简单3D网格类。
问题
假设我有一个非泛型类,其中我希望该类的字段是泛型类型。我希望非泛型类能够处理各种用户创建的类型。
我希望在非泛型类中设置一个泛型方法,该方法可以设置泛型字段,如下所示:
void <T> setGenericObject(T object){
genericField = object;
}但是,我不知道如何正确声明泛型字段。我不想只为其中的一个小字段创建一个泛型类(因为使用其他对象只是该类功能的一小部分)。如何正确声明类中的genericField变量以使其正常工作?
发布于 2018-08-09 23:12:51
您可以声明该字段为Object类型,并将其设置为等于该参数。Java中的所有类都扩展了Object类,因此可以将其用作泛型类型:
private Object genericObject;
public void setGenericObject(Object object) {
this.genericObject = object;
}然后,如果要调用不属于Object的方法,可以使用强制转换:
public void executeMethod() {
((ClassName) this.genericObject).methodName();
}不过,要注意ClassCastException的存在。
发布于 2018-08-09 23:27:19
这样做的一种方法是创建一个内部类:
public class Sample{
//other functionality
private class Inner<T>{
T g;
public T getG() {
return g;
}
public void setG(T g) {
this.g = g;
}
}
}然后它就可以这样使用了:
Sample sample = new Sample();
Sample.Inner<Float> inner = sample.new Inner<>();
inner.setG(new Float(0.1));
Float g = inner.getG();https://stackoverflow.com/questions/51776861
复制相似问题