gpt4 book ai didi

java - 是否有可能以某种方式克服 Java 中的类型删除?

转载 作者:行者123 更新时间:2023-11-29 03:00:15 25 4
gpt4 key购买 nike

事情是这样的。我们在我们的应用程序中使用了很多 Wicket 面板,出于测试目的,理想情况下它们应该是通用的。理论上,这部分工作:对于构造函数中的每个参数类型,我只能提供一个可能的参数,所以找到这些参数类型是什么是一个问题——反射。问题是:键入删除。许多构造函数使用 Model< > 类的多个版本作为具有各种不同类型参数的参数。 Type Erasure 意味着据我所知,我无法在运行时区分它们。那么,在这种情况下,有什么方法可以克服或规避类型删除吗?

最佳答案

早在您使用反射之前就遇到了问题,如果您解决了这个问题,您就不必再担心了。

因为无法区分 Model<A> 之间的区别和 Model<B>您不能使用这些类型重载两个方法或构造函数。相反,您需要创建一个采用 Model<C> 的方法。其中 C 是 A 和 B 的父类(super class)/接口(interface)。

你不能这样做

interface A extends C { }
interface B extends C { }

class MyClass {
MyClass<Model<A> modelA) { }
MyClass<Model<B> modelB) { }

这不会编译,因为它们在删除后具有相同的签名,所以您可以这样做

class MyClass {
MyClass<Model<? extends C> model) { }

这不仅可以编译,而且在运行时也没有歧义。

关于java - 是否有可能以某种方式克服 Java 中的类型删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35501286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com