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

Java isInstance与instanceOf运算符

石臻
2023-03-14
问题内容

整个泛型问题有点让我陷入困境,RTT更是如此。

规范?嗯,这是要点:

enum QueryHelper {
  query1,
  query2;
  static <T> QueryHelper getQueryHelper (Class<T> expectedReturn) {
    if (expectedReturn.isInstance (SomeRelatedClass.class))
      return query1;
    else
      return query2;
  }
}

然后我会这样称呼它:

...
QueryHelper helper = QueryHelper.getQueryHelper(SomeRelatedClass.class);
...

这样一来,我便可以在实际的帮助程序中灵活地分配查询返回类型。它进行一些转换和对象创建。我看到的是没有匹配项,我应该以其他方式这样做吗?还是整个想法不好?

真正的核心是我不了解class.isInstance和instanceOf运算符之间的区别?我应该使用后者吗?


问题答案:

这样一来,我便可以在实际的帮助程序中灵活地分配查询返回类型。

此方法的返回类型没有灵活性

static <T> QueryHelper getQueryHelper (Class<T> expectedReturn) {
    if (expectedReturn.isInstance (SomeRelatedClass.class))
      return query1;
    else
      return query2;
}

它将始终返回的实例QueryHelper。如果希望返回类型灵活,则需要将其定义为:

static <T> T getQueryHelper (Class<T> expectedReturn) {
}

现在,返回类型是灵活的,因为它将取决于参数的类型

真正的核心是我不了解class.isInstance和instanceOf运算符之间的区别?

区别在于,instanceof进行类型检查,该检查在编译时是固定的,例如:

static boolean isInstance(Object myVar) {
    return (myVar instanceof Foo);
}

将始终检查myVar是Foo的实例,而

static <T> boolean isInstance(Object myVar, Class<T> expectedType) {
    return expectedType.isInstance(myVar);
}

将检查myVar是ExpectedType的实例,但是每次调用该方法时,expectedType可以是不同的类型



 类似资料:
  • 问题内容: 是否有可以与运算符一起使用的有效的类Type变量?例如: 作为替代方案: 会有性能上的好处吗? 问题答案: 你在做什么实际上是不一样的。考虑一下子类会发生什么(我知道您不能子类,所以在这种情况下不要紧)。 如果您有一个对象,并且想知道它是否是某种类型的实例,并且您有该对象,则可以使用该方法。 无论哪种情况,我都希望性能差异不大。

  • 我试图了解java中的运算符,如链接:-instanceof 但当我尝试运行以下代码时:- } 我在编译时遇到以下错误: 下面是放置src代码的目录结构:- 注意:我从

  • 问题内容: 我看到使用和运算符超过运算符时性能有所提高。 有没有使用或使用的指南? 给定一个场景:我知道要匹配的确切类,即,(这些是最终类),等等。 使用操作员的做法不好吗? 问题答案: 和表现不同的原因是他们在做不同的事情。 测试左侧对象引用(LHS)是右侧类型(RHS)的实例 还是某个子类型 。 测试类型是否相同。 因此,建议您忽略性能问题,并使用可为您提供所需答案的替代方法。 使用操作员是不

  • 问题内容: 在JavaScript中的关键字可能会相当混乱首次遇到它的时候,人们往往会认为JavaScript是不是面向对象的编程语言。 它是什么? 它解决什么问题? 什么时候合适,什么时候不合适? 问题答案: 左侧(LHS)操作数是要测试到右侧(RHS)操作数的实际对象,右侧对象是类的实际构造函数。基本定义是: 这是直接从Mozilla开发人员网站获取的示例: 值得一提的是,如果对象继承自类的原

  • 问题内容: 运算符是做什么用的?我看过类似的东西 但是,这对我来说都没有意义。我已经完成了研究,但只提出了没有任何解释的示例。 问题答案: 是用于测试对象(实例)是否为给定Type的子类型的二进制运算符。 想像: 然而,随着;, 因为是的超类型,可能较少。 和, 这是因为Dog既不是的子类型也不是的父类型Cat,并且它也不实现它。 请注意,上面用于的变量是类型。这是一个运行时操作,将我们带到一个用

  • 我们将简单浏览一下运算符和它们的用法: 技巧 你可以交互地使用解释器来计算例子中给出的表达式。例如,为了测试表达式2 + 3,使用交互式的带提示符的Python解释器: >>> 2 + 3 5 >>> 3 * 5 15 >>> 表5.1 运算符与它们的用法 运算符 名称 说明 例子 + 加 两个对象相加 3 + 5得到8。'a' + 'b'得到'ab'。 - 减 得到负数或是一个数减去另一个数 -