如何将泛型类类型转换为Java中的另一个泛型类类型

时间:2018-03-15 13:35:53

标签: java class generics casting

这就是我想要的:

defmodule Othello.Game do
  @width 8
  alias Othello.Game, as: Game
  alias Othello.Utils, as: Utils

  defstruct enabled_spaces: Utils.gen_list(@width * @width, fn _ -> false end),
            is_game_over: false,
            is_first_player: true

  def width(), do: @width
end

但显然我不能用这种方式投射类型。

有办法吗?我很好奇......

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,类型Class<A>的值只能是完全类A的类对象,它不能是任何其他类。某些其他类B的类对象为Class<B>Class<B>永远不是Class<A>的子类型。您可能需要Class<? extends A>参数。

其次,你对.isAssignableFrom()的使用似乎是倒退的(除了它在语法上无效,因为B不是一个有效的表达式)。 clazz.isAssignableFrom(B.class)表示由clazz表示的类是B超类,在这种情况下,将clazz强制转换为{{}是没有意义的1}}。您可能需要Class<? extends B>

一旦你进行了上面的第一次更改(make B.class.isAssignableFrom(clazz)类型clazz),演员会编译,虽然它将是未经检查的演员。如果您不想进行未选中的广告投放,而不是Class<? extends A>,则可以执行(Class<? extends B>)clazz