java - 在java中生成动态类型的数组列表

标签 java

我有一个父类(super class)

class Geometry{
}

以及扩展它的两个类:

class ShapeOne extends Geometry{}

class ShapeTwo extends Geometry{}

我想要实现的是生成一个类型为 ShapeOne 的对象列表(从数据库中读取)或 ShapeTwo或任何其他 Geometry 的实例,但动态地将类型作为参数传递, 例如:

public ArrayList< Geometry Object > getList(/**passing typeof generated list**/){
  // getting data from Database;
  return new ArrayList<typeof generated list>();
}

so the call would be then like:
 getList(ShapeTwo);

感谢您的帮助:)

最佳答案

你不能那样做。由于type erasure , List<Geometry>不是 List<ShapeOne> 的父类(super class).这在此处得到了更好的解释:Is List<Dog> a subclass of List<Animal>? Why aren't Java's generics implicitly polymorphic? .

解决您问题的一些替代方案:

  • 返回List<ShapeOne>List<ShapeTwo>List<TheExpectedClass>而不是 List<Geometry> .
  • 返回<T extends Geometry> List<T>并通过 Class<T> clazz作为论据。可能您需要使用附加参数来识别从数据库中恢复的数据是否属于 Geometry 的特定子类。 .

关于java - 在java中生成动态类型的数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27302614/

相关文章:

从 Rust 调用时,Java JNI 在退出时崩溃

Java无法实例化类型模块(不是抽象类)

java - 哈希仅返回 8 或 9 个字符

java - 有哪些 Java 实用程序可用于对机器的 CPU、内存、磁盘和网络 I/O 性能进行基准测试?

java - 我如何知道我的应用程序何时被卸载或正在被卸载,以便我可以从我的数据库中删除相关内容?

java - 如何撤消java中的移动到垃圾箱操作?

java - 标志 0x40028 是什么?

java - HTTP 客户端-服务器,我不认为我正在使用 BasicResponseHandler() 关闭客户端连接

java - 启动 jboss 服务器时未构建 Maven 依赖项

java - 为什么 JavaFx SceneBuilder 找不到用户定义的类?