当前位置: 首页 > 面试题库 >

有没有办法找到Java中模板(通用)参数的类型?

湛同
2023-03-14
问题内容

我正在尝试在Java中执行以下操作:

public static <T> T foo() {
  return (T) bar(T);
}

public static Object bar(Class<?> klaz) {
  return klaz.newInstance();
}

但是代码无法编译,因为我不能用 T 代替 Class <?>
在具体的课程中,我可以这样称呼 bar

bar(ConcreteClass.class);

但是对于 T而言 ,这是行不通的。即没有 T.class 这样的东西 __

在C#中, typeof 适用于具体类型和模板类型。因此,对bar的调用将是:

bar(typeof(T));

但是我无法在Java中找到任何类似的东西。

我是否缺少某些东西,或者Java是否无法获取模板参数的类型?如果Java没有该功能,是否有任何解决方法?


问题答案:

无法获取类型。Java的泛型使用类型擦除,因此,即使Java本身也不知道运行时T是什么。

至于解决方法:您可以将foo定义为采用类型的参数,Class<T>然后使用该参数。



 类似资料:
  • 问题内容: 我对包含不带参数的泛型方法的代码感到困惑,所以这种方法的返回泛型类型是什么,例如: 这是通过以下方式调用的: 接口定义为: 我的问题:是否接受字符串,对象和所有内容。那么什么时候将通用返回类型指定为String呢? 问题答案: 编译器从 LHS 分配中使用的具体类型推断出类型。 从此链接: 如果类型参数未出现在方法参数的类型中,则编译器无法通过检查实际方法参数的类型来推断类型参数。如果

  • 是否有任何方法可以检测一个类是正常类型还是包含非类型参数的模板类型(元类型)的实例化?我想出了这个解决方案: 但是,对于混合了非类型和类型的模板,例如 除了必须显式指定重载中的类型之外,我无法提出任何解决方案。当然,由于组合爆炸,这是不合理的。 相关问题(不是欺骗):是否可以仅通过标识符检查成员模板的存在?

  • 我正在尝试在javascript中重用模板文字。 这不起作用: 我认为更改变量会在模板中动态更改。但我学到了其他东西:D 这是可能的吗?如果是的话,正确的做法是什么? 谢了。

  • 我正在建立一个学生时间表生成器,我需要一种方法来产生一个以上的解决方案。有什么方法可以节省可行的分数或xhard/ysoft的分数吗? 我需要能够输出多个潜在的时间表,这样学生将有一个时间表的选择,而不是另一个,如果出于任何原因,他们不想要“最好的”时间表(也许他们不喜欢其中一个教授,也许他们不想要上午8点的课,无论什么) 我最初的想法是使用bestSolutionChanged事件侦听器省去所有

  • 我得到这个错误,即使我是渲染模板。我还尝试更改函数名。 我认为这是由于烧瓶(错误)造成的 Traceback(最近的调用最后):文件/用户/ayyagari/文档/DeepNews/web_2/venv/lib/python3.7/site-包/烧瓶/app.py,行2463,在调用返回self.wsgi_app(环境,start_response)文件/用户/ayyagari/文档/DeepNe

  • 问题内容: 我一直在寻找一个问题:从其字符串名称实例化一个类,该字符串名称描述了如何在具有名称时实例化一个类。有没有办法用Java做到这一点?我将拥有包名称和类名称,并且我需要能够创建具有该特定名称的对象。 问题答案: 两种方式: 方法1-仅适用于具有无参数构造函数的类 如果你的类具有无参数构造函数,则可以使用并使用该方法创建一个实例(尽管请注意,此方法通常被认为是有害的,因为它可以击败Java的