为什么将 (Object)null 结果转换为非空?

2024-02-17

我使用 java 7,并创建一个 varargs 方法

public class JavaApplicationTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        addBundleMessage("b", Integer.SIZE, "key", (Object) null);
    }

    public static void addBundleMessage(String bundleName, Integer severity, String key, Object... params) {
        if (params == null)
            System.out.println("params Is null");
        else
            System.out.println("Params not null");
    }
}

如果我不转换对象,IDE Netbeans 或 Eclipse 会抱怨,但它会编译:

最后一个参数类型不精确的 varags 方法的非 varargs 调用 范围

When No cast: 显示参数为空

当我将 null 投射到(Object)它显示参数不为空

当我将 null 投射到(目的[])它显示参数为空

这是正常行为吗?


是的,这是“正常”行为。

混乱来自于稍后将可变参数附加到语言上并使用数组作为“实际参数”来实现以保存可变数量的参数。

public static void addBundleMessage(String bundleName, Integer severity,
   String key, Object... params) {

几乎与

public static void addBundleMessage(String bundleName, Integer severity,
   String key, Object[] params) {

在底层,参数被包装为 Object[] 传递。

但是,您仍然可以选择自己传递该数组。

如果你使用(Object[]) null,你得到一个参数(即空)。

如果你使用(Object) null,它使用了 varargs 方法,因此传入了一个数组来保存参数(其中只有一个为 null)。

对于 varargs 方法的“正常使用”,params永远不会为空。你能得到的“最糟糕的”是一个空数组(如果根本没有参数)。

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

为什么将 (Object)null 结果转换为非空? 的相关文章

随机推荐

  • \n 在 Sklabel SpriteKit 中不起作用

    我在我的游戏中使用了以下代码 问题是我无法像使用 CCLabelTTF 那样在 spritekit 中制作多行标签 有人可以帮助我吗 另外我无法在我的代码中使用 t 或 n 感谢您的提前回复 SKLabelNode winner SKLab
  • C++11 std::threads 并等待线程完成

    我有一个计时器对象向量 每个计时器对象都会启动一个模拟生长期的 std thread 我正在使用命令模式 发生的情况是每个计时器都被一个接一个地执行 但我真正想要的是一个被执行 然后一旦完成 下一个 一旦完成下一个 同时不干扰主程序的执行
  • 工具提示内的图像tiptip

    我需要在具有悬停效果的工具提示中插入图像 tel view tipTip defaultPosition top delay 400 fadeIn 400 keepAlive true activation click HTML img s
  • 多个神经网络各有一个输出还是一个有多个输出?

    我想将输入分类为三种可能性之一 使用 3 个网络 每个网络有一个输出 还是 1 个网络 每个网络有 3 个输出 更好 即 3 个网络输出0 or 1或 1 个输出长度为 3 的单热向量的网络 1 0 0 答案是否会根据输入数据分类的复杂程度
  • 无法在 Keras 中复制 matconvnet CNN 架构

    我在 matconvnet 中有以下卷积神经网络架构 我用它来训练我自己的数据 function net cnn mnist init varargin CNN MNIST LENET Initialize a CNN similar fo
  • 在 lambda 中使用 aws-sdk 吗? (AWS.ApiGatewayManagementApi 不是 Response 的构造函数)

    我正在尝试在 lambda 中使用 aws sdk 但我似乎无法弄清楚 var AWS require aws sdk AWS config update var DDB new AWS DynamoDB apiVersion 2012 1
  • 使用 Bootstrap 3 垂直居中元素

    我想将 设计 标签和 21nov 垂直居中 div class row div class col xs 6 col xs offset 1 a href job 52 span class jobtitle designer span a
  • 调整 div 大小以适应最大高度的内容

    我有一个包含动态内容的 div 当内容加载到 div 中时 我希望调整 div 大小以适应内容 但我希望此调整大小具有最大高度 如果内容需要超过这个最大高度 我希望有一个滚动条 我已经搜索过这里的问题 但无法找到我要找的东西 除了提问者回答
  • 带有子目录的 CMake

    我正在尝试设置我的项目以使用 CMake 正确编译 我的目录如下所示 root bin Where I want to build CMake from using cmake build include database database
  • Scala 抽象类型表示子类的类型

    我正在寻找一种方法来定义返回类型 T 的方法 其中 T 子类的类型 我知道我可以使用抽象类型来做到这一点 但不喜欢必须为每个子类重新定义 T 的开销 一些示例代码 object Helper def help A lt MyClass cl
  • Jquery Datepicker 更改月份后触发(月份渲染后)

    我想强调一下本月的一些日子 我可以在第一个月执行此操作 但不能在单击 下个月 或 上个月 后的新月份执行此操作 我尝试使用 onChangeMonthYear 事件 但这在新的 或上一个 月份呈现之前执行 有任何想法吗 也许你最好的选择是b
  • Windbg:psscor4 不起作用

    我搜索并尝试了很多东西 但无法让 psscor4 正常工作 当我调用 threads 我总是得到 请求ThreadStore失败 我检查的内容如下 我有一个为 X86 平台编译的 NET 4 应用程序 我使用的是Windbg版本6 2 92
  • 两组之间均匀分布的数字 (Vectorize LINSPACE) - MATLAB

    如何定义矩阵M根据M a b a 5 b from a to b分 5 步 当a and b是向量或集合 更具体地说 每一行i in M第一个值应该等于a i 和最后的值b i 其间有 5 个相等的步骤 例如 如果我有 a 0 b 10 0
  • 如何将两个 PDF 页面拼接在一起成为一张大页面?

    我有两张 36 x 48 海报 LaTeX 我想将其附加到一张 72 x 48 海报中 垂直堆叠 浏览 SO 和 GS 文档 我没有任何线索 我不是 CLI 向导 我怎样才能做到这一点 此外 该过程不应有损地压缩光栅图像 因为这将以 240
  • switch 似乎比 if 慢

    我很好奇速度switch 相信它 非常 快 但我有一个测试用例 似乎表明单个开关的速度大约与 4 一样快if测试 当我预期 没有充分的理由 它会像 1 次测试一样快 这是我写的两个方法来比较switch with if public sta
  • 挑选一个删除文件的提交

    我需要合并几个存储库 每个存储库都是从TFS http en wikipedia org wiki Team Foundation Server 合而为一 为此 我使用 gitcherry pick 命令 该命令适用于某些提交 但不适用于其
  • 缺少 Google 地图 API V2 google-play-services_lib.jar

    I just imported an example of the google map api V2 for android to test It s missing the google play services lib jar I
  • 按 xml 字母顺序对数据进行排序

    输入 XML
  • 如何配置 django-uploadify 仅用于视频上传?

    我想用django uploadify https github com tstone django uploadify仅上传视频 我只希望它仅上传视频 所有类型的视频 或至少所有类型的流行视频格式 到目前为止 我添加了uploadify
  • 为什么将 (Object)null 结果转换为非空?

    我使用 java 7 并创建一个 varargs 方法 public class JavaApplicationTest param args the command line arguments public static void ma