【问题标题】:Check class of generic object variable [duplicate]检查通用对象变量的类[重复]
【发布时间】:2019-12-11 15:22:23
【问题描述】:

我正在编写一个函数来测试 Object 类型的变量是否属于给定类型。例如,如果我输入"This is a string"String.class 作为参数,它应该返回true。

我尝试了以下代码:

public static boolean Debug(Object variable, Class<?> testClass) {
    if (variable instanceof testClass) {
            return true;
    }
    return false
}

但是,我得到了错误:“testClass cannot be resolve to a type”。

我不太清楚这是为什么。

任何建议将不胜感激。

【问题讨论】:

  • 我可能错了,但我认为你不能将变量作为 instanceof 运算符的正确参数,它必须是一个具体的类/接口
  • 好吧,“abc”不是Class 的实例,即使Class 描述 String 类。您可能想使用testClass.isInstance(variable)。但老实说通常这代表XY problem,你能解释一下为什么你要创建这样的代码吗?
  • 请遵守 Java 命名约定。该方法应该被称为debug(camelCase,而不是PascalCase)。
  • 并且不确定这里有多少赞成票...这确实不像 OP 之前做过很多研究...
  • @GhostCatsaysReinstateMonica 正确!

标签: java


【解决方案1】:

错误信息是正确的:testClass 不是 类型,它是Class&lt;String&gt; 类型的对象instanceof 运算符只能用于编译时给出的类型。相反,您可以使用 Class 对象的 Class#isInstance 方法进行检查:

public static boolean Debug(Object variable, Class<?> testClass) {
    if (testClass.isInstance(variable)) {
            return true;
    }
    return false;
}

更好的写法是:

public static boolean Debug(Object variable, Class<?> testClass) {
    return testClass.isInstance(variable);
}

此时,它是如此之小,以至于我开始怀疑这种方法是否值得拥有。

【讨论】:

  • ...此时该方法或多或少已过时,因为它只是更清晰的方法调用testClass.isInstance(variable)Debug(variable, testClass) 的别名。
  • 虽然正确,但我质疑这种方法的价值。与其打电话给Debug(someVariable, String.class),不如直接打电话给String.class.isInstance(someVariable)
  • @Zabuza 当然,但这留给读者作为练习;)
猜你喜欢
  • 2013-03-28
  • 2013-01-30
  • 2020-04-27
  • 2019-09-02
  • 2021-11-17
  • 2014-07-02
  • 1970-01-01
  • 2020-11-09
相关资源
最近更新 更多