【问题标题】:How can i pass a generic class as param to Intent constructor如何将泛型类作为参数传递给 Intent 构造函数
【发布时间】:2013-03-21 18:02:58
【问题描述】:

我的 android 应用程序中有这个通用活动

public class NavegadorActivity<T> extends Activity {

    ....
...
}

我正试图这样称呼它

Intent intent = new Intent(v.getContext(), NavegadorActivity<Clientes>.class);

但是,Intent 构造函数不接受泛型类作为参数。然后我尝试了这段代码

Class<NavegadorActivity<Clientes>> NavClientes =  NavegadorActivity.class;

Intent intent = new Intent(v.getContext(), NavClientes.class);

这也不起作用。

也不是这个

Class<NavegadorActivity<Clientes>> NavClientes =  NavegadorActivity<Clientes>.class;

Intent intent = new Intent(v.getContext(), NavClientes.class);

任何人都知道如何将泛型类作为参数传递给 Intent 构造函数?

谢谢

【问题讨论】:

  • 出于好奇,您为什么使用通用活动?
  • 这与Intent构造函数无关;问题是您的语法错误。 NavegadorActivity&lt;Clientes&gt;.class 不是有效语法(因为您不能将泛型与 .class 结合使用),NavClientes.class 也不是(因为 NavClientes 是变量名,而不是类型名)。
  • (您尝试执行的操作也存在概念问题。如果stringListArrayList&lt;String&gt;intListArrayList&lt;Integer&gt;,那么stringList.getClass()intList.getClass()将是Class相同 实例。您根本不能使用Class 传递泛型类型信息,因为该信息在运行时会被删除。)
  • @Mr.Me 我正在尝试在 NavegadorActivity 中创建一个显示 T 对象的数据网格

标签: java android generics


【解决方案1】:

我不相信android Intent System 支持Generic 活动,你不应该只是自己创建一个活动对象。我建议在您的活动中添加一个代表通用功能的内部类,并通过

传递该通用名称
intent.putExtraString("class", yourClass.getName());

并通过

检索该类对象
Class<?> myGeneric = Class.forName(intent.getStringExtra("class", "java.Object");

【讨论】:

  • 有了这个我遇到了另一个问题,在 NavegadorActivity 我需要声明另一个通用对象 DbAdapter 但 myGeneric 是一个类,我不能再次将它转换为类型。
【解决方案2】:

怎么了

Intent intent = new Intent(v.getContext(), NavegadorActivity.class);

【讨论】:

  • NavegadorActivity的构造函数如何处理T类?
  • 构造函数不需要展示,因为它是一个泛型类,需要知道什么是类T
  • @Heberfa:您问如何将代表NavegadorActivityClass 对象传递给Intent 构造函数。运行时只有一个NavegadorActivity 类对象,可以使用NavegadorActivity.class 访问。这个答案回答了你的问题。 NavegadorActivity的构造函数与问题无关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
相关资源
最近更新 更多