【发布时间】:2014-11-28 20:43:23
【问题描述】:
我有一个函数应该采用任何扩展 Object 的实例,然后将转换后的实例传递给函数。我不想使用开关,因为该函数可以接受大量的对象类型,所以它会成为一个非常大的方法。
public void attachBufferData(ContextConstant bufferType, Object<T> data, ContextConstant usage) {
glBufferData(bufferType.getGLType(), (T) data, usage.getGLType());
}
上面的代码不起作用(因为Object 不是泛型类型),但它应该可以理解我正在尝试做的事情。
----- 编辑-----
好的,我试过了:
public void attachBufferData(ContextConstant bufferType, Object data, Class<?> dataType, ContextConstant usage) {
glBufferData(bufferType.getGLType(), dataType.cast(data), usage.getGLType());
}
但是我得到一个编译错误 glBufferData(int, long, int) is not applicable for arguments (int, capture#1-of ?, int)。我想这是一个巨大的 switch 语句:(
【问题讨论】:
-
只传递对象。你不需要将它转换成任何东西。
-
glBufferData 被每个具体类型
T重载?这是你想要达到的目标吗?否则,我不明白您为什么要尝试转换为特定类型。 -
@HotLicks 但 glBufferData 具有适用于每种类型的函数,因此您必须传递 FloatBuffer 或 IntBuffer 或其他的实例,而不仅仅是 Object 的实例。
-
(Java 中没有“动态案例”之类的东西。)
-
@IsaacWoods - 然后你必须有一个 switch 语句或其他什么。每个特定函数都必须是一个单独的调用(除非您使用反射)。
标签: java oop casting instance-variables