通用擦除概念

2024-01-06

您能帮我理解这里的通用概念吗?

// 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编译器在这里抛出错误? 因为编译后.

Thanks


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

从逻辑观点来看:
甚至不能保证无论模板参数T您使用有一个默认构造函数。这显然提出了如何处理默认构造函数缺失的问题。可能的解决方案是产生运行时错误、编译时错误或禁止任何T它不提供默认构造函数。后者显然会破坏模板定义,这允许any T。运行时错误会使事情变得相当复杂,并产生与上面提到的相同的问题。仍然首先阻止这种行为并抛出编译时错误。

从内部来看:
假设我们可以使用提供的代码。那么它会如何运作呢?由于擦除,new T()会产生一个Object。但如果T is Integer?好吧,我们完蛋了。一个Object不是一个Integer,所以我们会得到一个简单的类转换异常。

总而言之:从实际的 POV 来看,允许上述编译是行不通的,而且还会破坏 java 中泛型的当前定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通用擦除概念 的相关文章

随机推荐

  • 无法在 PayPal HTMLButton 上指定每个付款请求的“金额”

    我正在尝试使用 HTML 按钮 方法与 PayPal 集成 结帐流程相当简单 用户点击 立即购买 gt 转入 PayPal gt 付款处理 gt 返回网站 根据客户想要 立即购买 的商品 提交的表单中的 金额 会有所不同 并且我无法让 Pa
  • 如何使用 MVC Web Api 内容服务器和 Android 最终用户 apk 实现 OWIN 身份验证服务器

    我正在尝试实施 用于按需返回内容的 MVC Web API 服务器 REST 服务器 中央身份验证 OAuth 2 0 服务器 例如 OWIN Android 最终用户端应用程序 场景是这样的 Android应用程序在REST服务器上请求内
  • 使用 node.js 在 Azure 文件存储中上传文件

    我们正在尝试创建一个 Web 服务 以使用 node js 服务将文件上传到 Azure 文件存储 下面是node js服务器代码 exports post function request response var shareName r
  • 为什么 PRIVATE 成员函数不能成为另一个类的友元函数?

    class x void xx class y friend void x xx 这会导致类似的错误 错误 友元函数 xx 是 x 的私有成员 为什么我不能将私有成员函数声明为另一个类的友元 同学 朋友 9 http eel is c dr
  • iOS AppStore 上的 CCATS 和加密

    这将是一个很长的问题 实际上是一组相关的问题 我想制作一个 iOS 应用程序 将在 Apple 的 App Store 上出售 显然 我的应用程序将在文档目录中存储一些敏感的用户数据 出于安全原因 我想到了一种可以保护该数据的加密系统 有趣
  • 所得税计算的编程逻辑

    谁能帮我为我们的办公室员工工资税表创建 PHP 或 mysql 代码 这是我们税收监管的基础 If salary is gt 0 and lt 150 it will be 0 Nill If salary is gt 151 and lt
  • 删除完整磁盘上最旧的文件

    一个以 100MB 块将数据写入磁盘并通过附加 1 来增加文件名的应用程序 因此n1 n2 n1000 这最终会使用分区 Linux 主机 上的所有可用空间 我正在寻找一种方法来删除该系列中首次写入的文件 直到驱动器空间达到特定利用率 如果
  • 从窗口类名获取窗口句柄

    我试图在我的进程中获取子窗口的窗口句柄 我拥有的唯一信息是窗口类名称 我可以使用任何 win32 函数吗 我是用 C 做的 更详细一点 这是一个 Visual Studio 插件 用 C 编写 所以我的流程是 Visual Studio 它
  • 如何在PHP中通过计算总和来显示数据库中数量最多的酒店名称?

    我是 PHP 编码新手 我想根据用户从复选框中选择的偏好的相应计数 以升序显示数据库中的酒店名称 我的代码根据用户输入的偏好显示酒店名称 其逻辑是 如果数据库中针对该酒店的首选项名称下存在 1 则显示酒店名称 例如 如果用户从 7 个复选框
  • 是否可以将数据绑定到扩展方法?

    缺乏关于该主题的问题可能表明这里有代码味道 但是 是否可以为类编写扩展方法并像属性一样对其进行数据绑定 假设我提供了一个无法从根本上更改的类结构 但我想将其一系列布尔属性表示为字符串以用于显示目的 简化的基类 public class Tr
  • 如何为托管虚拟机配置 Google App Engine 运行状况检查端点

    Google App Engine 向托管虚拟机请求 ah health 进行运行状况检查 我尝试部署一个我不是代码维护者的项目 它将部署为托管虚拟机以进行自动缩放和运行状况检查 目前 app yaml 不支持重写规则 如果支持 我可以将
  • ruby:如何知道脚本是否在第三次重试?

    begin some routine rescue retry on third retry output no dice end 我想让它在 第三次 重试时打印一条消息 可能不是最好的解决方案 但一个简单的方法就是制作一个tries多变的
  • Selenium 上的 JavaScriptexecutor setAttribute 值

    我正在 IE11 上执行 selenium 自动化 现在对于一个元素 说 ele ele sendKeys characters 不直接工作 所以我试图改变它的 值 属性
  • 将参数传递给 javascript onclick 函数

    我在从 javascript onClick 函数获取参数时遇到问题 title as li class item li 我的控制台日志打印此 Uncaught SyntaxError Unexpected token 请不要使用内联js
  • 为什么 Eclipse 需要传入网络连接(使用 OS X)?

    有谁知道为什么 Eclipse 要求传入网络连接 我四处搜索 看到提到使用 PyDev 进行代码完成 但我在 PyDev 中禁用了代码完成 重新启动 但仍然提示传入网络连接 PyDev 生成一个 shell 并连接到它以请求有关内置模块的信
  • iphonecamerOverlay 用于替代现实应用程序

    有谁知道如何拍摄 iPhone 相机上捕获的图像 并进行一些图像处理 例如边缘检测 骨架化 然后将处理后的图像的一部分覆盖在原始图像上 例如仅突出显示的边缘 更一般地说 如何创建具有透明度的 UImage 我是否只是缩放图像并用 alpha
  • 为每个循环附加到新列表

    我正在运行一个 for 循环 并将一个值附加到循环中运行的每个文件的列表中 当我使用append 时 在第二次运行for循环期间 它将新值附加到与第一次运行循环中相同的列表中 有没有办法在每次循环运行时追加并创建一个新列表 phaseres
  • 将 CIFiler 应用于图像的遮罩部分

    我正在寻找一种将 CIFilter 应用于由蒙版定义的图像部分的方法 像这样 给定图像 来源http imageshack us scaled landing 213 browserpreviewtmp1p jpg http imagesh
  • 命令 PhaseScriptExecution 失败,退出代码非零 Xcode 11.3.1

    我正进入 状态Command PhaseScriptExecution failed with a nonzero exit code经常出错 我遵循以下解决方法但没有帮助我 解决方法1 钥匙串访问 gt 右键单击 登录 gt 再次锁定和解
  • 通用擦除概念

    您能帮我理解这里的通用概念吗 Can t create an instance of T class Gen