java - 如何在 Java 的标准类中设置通用对象?

标签 java object generics

<分区>

背景语境:

我有一个代表复杂 3D 模型的非通用类。我还有一系列标准的 3D 几何类(Sphere、Cube、Cuboid),它们都继承自一个抽象类,因此所有子类都继承了相同的字段和函数。因此,每个类都需要能够使用 Complex 3D 模型类,它不是从抽象类继承的(它不需要相同的字段/函数)。

所以我想将所有子类与复杂模型类一起使用。具体来说,一个子类可以在用户需要时使用复杂模型,因此只要用户需要,它就会作为一个字段保存到这个类中。复杂类需要访问这些对象的字段和函数,因此我认为使用通用函数可以应用于所有具有相同字段/函数的简单 3D 网格类。

问题

假设我有一个非泛型类,我希望该类的一个字段是泛型类型。我希望非泛型类能够处理各种用户创建的类型。

我想要一个可以设置通用字段的非通用类中的通用方法,如下所示:

void <T> setGenericObject(T object){
    genericField = object;
}

但是,我不知道如何正确声明通用字段。我不想只为它的一个小领域创建一个通用类(因为与其他对象一起工作只是该类功能的一小部分)。我将如何在我的类中正确声明此 genericField 变量以使其正常工作?

最佳答案

您可以将字段声明为 Object 类型并将其设置为等于参数。 Java 中的所有类都扩展了 Object 类,因此您可以将其用作泛型类型:

private Object genericObject;

public void setGenericObject(Object object) {
    this.genericObject = object;
}

然后如果你想调用一个不属于 Object 的方法,你可以使用强制转换来实现:

public void executeMethod() {
    ((ClassName) this.genericObject).methodName();
}

不过,请注意 ClassCastException

关于java - 如何在 Java 的标准类中设置通用对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51776861/

相关文章:

c# - 通用委托(delegate)变量

java - 将带有 `sort` 的 Java `? super T` 签名转换为 Scala(泛型)

java - 使用扩展 ASCII 范围将 int 转换为 char 并返回

javascript - 为什么 console.log(array) 给出的结果与 console.log({array}) 不同?

php - 无法访问 php 中的数组值

javascript - 为什么变量 "y"的值为 5?不是7?

generics - 如何从函数返回过滤器迭代器?

java - 信号量类中的公平设置

java - 带 GUI 的 Tic Tac Toe

java - 如何根据值降序对TreeMap进行排序