有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java类型安全:未选中的从对象强制转换

我试图将一个对象投射到我的Action类,但它会导致一个警告:

Type safety: Unchecked cast from Object to Action<ClientInterface>

Action<ClientInterface> action = null;
try {
 Object o = c.newInstance();
 if (o instanceof Action<?>) {
  action = (Action<ClientInterface>) o;
 } else {
  // TODO 2 Auto-generated catch block
  throw new InstantiationException();
 }
 [...]

谢谢你的帮助


共 (3) 个答案

  1. # 1 楼答案

    和往常一样,乔恩·斯基特是对的

    详细说明他回答中不容易的部分:

    给定

    class ClientAction implements Action<ClientInterface> {}
    

    你可以写:

    Class<? extends Action<ClientInterface>> c = ClientAction.class;
    Action<ClientInterface> action = c.newInstance();
    

    这消除了强制转换和警告,但代价是引入了非泛型类型,因此可以使用.class来获得足够准确的Class对象

  2. # 2 楼答案

    由于擦除,您丢失了类型信息(即,参数化类型已被擦除),因此出现警告。除了清理周围的代码,以便更频繁地使用泛型之外,您什么也做不了,这样您就可以传递泛型类型信息并避免强制转换

  3. # 3 楼答案

    别担心。这是因为Java编译器无法知道对象的真实类型