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));
    }
}