Java 从类强制转换对象以适应泛型
我有一个接收Java 从类强制转换对象以适应泛型,java,generics,Java,Generics,我有一个接收类的映射?extends EntityBase意味着它可能被限制为一个子类型,但您不知道是哪一个子类型。这意味着编译器无法确保您传递的对象实际上是正确的类型 假设您有一对名为Foo和Bar的类,它们都扩展了EntityBase。如果呈现程序变量是通用呈现程序则?extends EntityBase意味着它可能被限制为一个子类型,但您不知道是哪一个子类型。这意味着编译器无法确保您传递的对象实际上是正确的类型 假设您有一对名为Foo和Bar的类,它们都扩展了EntityBase。如果您的
类的映射?extends EntityBase
意味着它可能被限制为一个子类型,但您不知道是哪一个子类型。这意味着编译器无法确保您传递的对象实际上是正确的类型
假设您有一对名为Foo
和Bar
的类,它们都扩展了EntityBase
。如果呈现程序
变量是通用呈现程序则?extends EntityBase
意味着它可能被限制为一个子类型,但您不知道是哪一个子类型。这意味着编译器无法确保您传递的对象实际上是正确的类型
假设您有一对名为Foo
和Bar
的类,它们都扩展了EntityBase
。如果您的renderer
变量是genericrenderer,请提供draw
方法实现。这似乎有很多不必要的强制转换和反射。为什么EntityBase
上没有draw(Batch)
方法?公共抽象void draw(SpriteBatch,t object)@AndyTurner我正在尽可能地将服务器端对象与客户端进程分开。请提供draw
方法实现。这似乎是很多不必要的强制转换和反射。为什么EntityBase
上没有draw(Batch)
方法?公共抽象void draw(SpriteBatch,t object)@AndyTurner我正试图尽可能地将服务器端对象与客户端进程分开。作为补充:如果您可以选择使用Google的库,这可能会有所帮助。您需要定义子类,如FooRenderer
和BarRenderer
,它们分别扩展GenericRenderer
和GenericRenderer
,以便每种渲染器(而不是实体)有自己的类
对象用作映射键。但是您仍然需要一种方法从它渲染的实体类
中查找渲染器类
对象,并且以类型安全的方式执行这一操作可能会很棘手。作为补充:如果您可以选择使用Google的库,它可能会对此有所帮助。您需要定义子类,如FooRenderer
和BarRenderer
,它们分别扩展GenericRenderer
和GenericRenderer
,以便每种渲染器(而不是实体)有自己的类
对象用作映射键。但是您仍然需要一种方法从渲染器渲染的实体类
对象中查找渲染器类
对象,以类型安全的方式执行此操作可能会比较困难。
for(Entity entity : gameStage.getEntityEngine().getEntities()) {
if(entity instanceof EntityBase) {
EntityBase entityBase = (EntityBase) entity;
GenericRenderer<? extends EntityBase> renderer =
Betley.instance.renderer.getRenderer(entityBase.getClass());
renderer.draw(batch, entityBase.getClass().cast(entityBase));
}
}