小编Bra*_*rad的帖子

Java Generics Hell - 传递这个,但它想要类型T

我目前正在开发一个轻量级的通用仿真框架.目标是允许人们将Simulation和Scenario对象子类化为其特定于域的需求.仿制药似乎是实现这一目标的合适方式,但我担心我可能会陷入仿制药的地狱.

Sim对象提供对模拟实体的访问并控制sim(开始/暂停/停止)

Scenario对象允许您使用模拟实体填充Sim.

SIM卡:

public class Sim 
{
  public <T extends Sim> void loadScenario(Scenario<T> scenario)
  {
      reset();
      scenario.load(this);
  }
}
Run Code Online (Sandbox Code Playgroud)

场景:

public interface Scenario<T extends Sim>
{
    public void load(T sim);
}
Run Code Online (Sandbox Code Playgroud)

我们的目标是让用户创建一个MySimextends SimMyScenarioimplements Scenario<MySim>对他们的域.

例如MyScenario:

public class MyScenario<MySim>
{
    public void load(MySim sim)
    {
        // make calls to sim.addMySimEntity(...)
    }
}
Run Code Online (Sandbox Code Playgroud)

具体来说,使用上面的代码,scenario.load(this)调用Sim.loadScenario给出了错误:Scenario类型中的方法load(T)不适用于参数(Sim).我理解这是因为我正在加载this(这是类型Sim)当需要的是T extends Sim什么意味着我应该传递一个可以是Sim的任何子类型的 …

java generics

5
推荐指数
1
解决办法
568
查看次数

标签 统计

generics ×1

java ×1