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

通用删除概念

曾弘扬
2023-03-14
问题内容

您能否帮助我在这里理解通用概念。

// Can't create an instance of T.
class Gen<T> {
  T ob;

  Gen() {
    ob = new T(); // Illegal!!!
  }

  public static void main() {

    Gen<Integer> genobj = new Gen<Integer>(); //Error
  }
}

编译Java代码时,所有通用类型信息都将被删除(擦除)。这意味着将类型参数替换为其绑定类型(如果未指定显式绑定,则为Object),然后应用适当的强制类型转换(由类型参数确定)以保持与类型参数指定的类型的类型兼容性。编译器还强制执行此类型兼容性。

我的问题:-为什么Java编译器在这里抛出错误?崩溃后厌恶。

谢谢


问题答案:

这里有几种方法可以解决:

逻辑POV:
甚至不能保证T您使用的任何模板参数都有默认构造函数。显然,这带来了如何处理缺少默认构造函数的问题。可能的解决方案是产生运行时错误,编译时错误或禁止任何T不提供默认构造函数的错误。后者显然会破坏模板定义,后者允许
any T。而且运行时错误会使事情复杂化,并产生与上述相同的问题。首先仍然要防止此行为,并抛出编译时错误。

从内部来看:
假设我们可以使用提供的代码。那怎么办?由于擦除,new T()将产生一个Object。但是,如果TInteger?好吧,我们被搞砸了。An
Object不是an Integer,因此我们将获得一个普通的类广播异常。

因此,总而言之:从实用的POV来看,允许以上内容无法编译,而且破坏了Java中泛型的当前定义。



 类似资料:
  • 问题内容: 我刚刚在android应用程序中编写了一个函数,该函数使用Java中的标准“文件”类删除文件。即: 尽管上面的过程很简单,但我一直想知道通过“ ContentResolver”执行该操作是否有任何好处。任何意见,将不胜感激。 干杯, 杰瑞德 ------------------------------------------编辑------- 这是通过Content Resolver删

  • 我有一个整数和零的列表。我想只过滤掉Nones。 这将删除None,但也删除0(整数)。我想以保持0(整数)的方式修改它 结果是一个列表[1,0,1,0,1,0,1,0]--

  • 删除应用是一个非常危险的操作,不开放给普通用户。 最好只有管理员才有权限删除应用 删除应用会删除与之相关的所有数据。如jenkins、consul资源及k8s相关的资源 删除 在“应用列表”页找到需要删除的应用点击“下线”按钮弹出以下对话框。 确认要删除该应用后,输入该应用名称删除。 骚等片刻该应用就消失了。

  • 问题内容: 我发现了一个有趣的功能,称为delete by query 。我如何在jest客户程序中使用它? 谢谢! 问题答案: 您可以使用如下所示的类: 另请注意,如果您运行的是ES 2.x或更高版本,则需要先从插件安装Delete by query API 。

  • 我正在尝试删除图像文件后,填充了关于文件的数据在一个模式。 我的jQuery如下所示: 和我的Coldfusion文件: 这是在我签入网络面板时将作为数据发送,并返回一个200,尽管我看不到cfdump的内容。 我对FE还行,对CF不是那么热,我的猜测是我的CF过于复杂,但也没有做我希望它能做的事情。我确实试着参考了我以前写的一些东西,再加上下面这个: 如何使用Ajax将Javascript变量传

  • 问题内容: 如何从Jenkins GUI中删除构建?我知道我可以从“ jobs”文件夹中删除目录,但是我想从GUI中删除它。是否还可以删除多个版本? 问题答案: 如果您进入要删除的版本,并且拥有删除权限,那么您将在右上角看到“删除此版本”按钮。