java方法如何采用扩展泛型类型的参数

时间:2016-02-29 15:49:23

标签: java generics

我试图将一个小的MongoDB应用程序实现为jar文件,可以从一系列其他应用程序中使用。 (运行Java 6)

目的是拥有一个处理并包含DBCollectionMongoDatabaseMongoClient的类。 这些超类可以通过这些其他应用程序和MongoDB进行扩展。我还希望其他应用程序实现一个包含1 insertIntoDB()方法的接口。这个insertIntoDB()方法应该采用1个参数,这将是另一个子类,这里是我的问题。接口如何指定泛型类型的扩展,以便每个实现返回扩展类型?

下面是一个进一步的解释:

class AsuperClass implements Ainterface {
  MongoClient aMongoClient
  MongoDatabase aMongoDatabase
  initMongoDb() {
    //doStuff
  }
}

class AsuperPojo {
  int propA
  String propB
}

interface Ainterface {
  void insertToDb(AsuperPojo); 
}

class SubClass1 implements Ainterface extends AsuperClass{
  @Override
  public void insertToDb(SpecialSubClass1Pojo aSpecialSubClass1Pojo) {
    //doStuff
  }
}

class SpecialSubClass1Pojo() {
  int propA
  String propB
}

class SubClass2 implements Ainterface extends AsuperClass{
  @Override
  public void insertToDb(SpecialSubClass2Pojo aSpecialSubClass2Pojo) {
    //doStuff
  }
}

class SpecialSubClass2Pojo() {
  int propA
  String propB
}

这可能是完全不同的做法吗?

1 个答案:

答案 0 :(得分:4)

如果我理解得很好,你正在寻找:

interface Ainterface<T extends AsuperPojo>  {
  void insertToDb(T foo); 
}

然后使用:

class SubClass2 implements Ainterface<SpecialSubClass2Pojo>

一些阅读:https://docs.oracle.com/javase/tutorial/java/generics/