背景信息:
我有一个非通用类,代表一个复杂的3D模型。我还具有一系列标准3D几何类(Sphere,Cube和Cuboid),它们都从抽象类继承,因此所有子类都继承相同的字段和函数。因此,每个类都需要能够与Complex 3D模型类一起工作,该类不会从抽象类继承(它不需要相同的字段/函数)。
因此,我想将所有子类与复杂模型类一起使用。具体来说,一个子类可以在用户需要时使用复杂的模型,因此只要用户需要,它将被保存为该类的字段。复杂的类将需要从这些对象访问字段和函数,因此我认为使用通用函数可以应用于所有具有相同字段/函数的简单3D网格类。
问题
假设我有一个非泛型类,我希望该类的字段为泛型类型。我希望非泛型类能够处理各种用户创建的类型。
我想要在非泛型类中设置通用字段的泛型方法,如下所示:
void <T> setGenericObject(T object){
genericField = object;
}
但是,我不知道如何正确地声明通用字段。我不想只为它的一个小字段创建一个通用类(因为与其他对象一起工作只是该类功能的一小部分)。我该如何在类中正确声明这个GenericField变量以使其起作用?
答案 0 :(得分:2)
您可以将字段声明为Object
类型,并将其设置为等于参数。 Java中的所有类都扩展了Object
类,因此您可以将其用作通用类型:
private Object genericObject;
public void setGenericObject(Object object) {
this.genericObject = object;
}
然后,如果您想调用不属于Object
的方法,则可以使用强制转换:
public void executeMethod() {
((ClassName) this.genericObject).methodName();
}
但是要注意ClassCastException
。
答案 1 :(得分:1)
一种方法是创建一个内部类:
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();