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

在Java中,我可以在instanceof表达式中使用原始类型文字或类型变量吗?

叶光华
2023-03-14
问题内容

我可以在instanceof表达式中使用原始类型文字或类型变量吗?

class MyClass<T> {
    {
         boolean b1 = null instanceof T; // T erasure -> Object should be used
         boolean b2 = 2 instanceof Integer; // Incompatible operands
    }

我遇到编译错误。有什么办法可以避免这些错误,并在instanceof表达式中使用原始类型文字/类型变量

基本上,我想向我保证,我永远也做不到。


问题答案:

不,因为 类型擦除 。的实例MyClass<T>实际上并不知道是什么T

您需要有个的实例Class<T>。然后,您可以使用该isInstance方法。一种方法是在构造函数中指定它:

class MyClass<T>
{
    private Class<T> clazz;

    MyClass(Class<T> clazz)
    {
        this.clazz = clazz;
    }

    // Now you can use clazz to check for instances, create new instances ect.
}

对于第二个,问题是第一个操作数,而不是第二个。原始值本身不是的实例Integer;盒装版本为:

Object obj = 2;
boolean b2 = obj instanceof Integer;

只要有了真正的原始值,就已经知道类型了,因此进行动态类型检查没有多大意义。



 类似资料:
  • 问题内容: 除了Swift,我还有这个问题。如何Type在泛型中使用变量? 我尝试了这个: This didn’t work either: 有没有办法做到这一点?我感觉到Swift只是不支持 它,并且给了我一些模棱两可的错误消息。 编辑:这是一个更复杂的示例,其中无法 使用通用函数标头来解决问题。当然,这没有任何意义, 但是我在代码中的某处合理地使用了这种功能 ,宁愿发布一个干净的示例而不是我的

  • 是否可以只使用一行代码就将输入变量的数据类型(可以是任何基元类型,int、bool、float、double)作为字符串返回?我知道对于字符串类型,使用和可以很容易地做到这一点,但我不确定如何使用这些方法返回基元类型的类型。我还想保持我的代码非常简短,最好只用一行。 我到处找了找,找不到任何地方,这个问题已经以我要求的方式得到了回答。

  • 问题内容: 两者之间有什么区别,哪个更好使用?为什么? 问题答案: 是interface,哪里是class,并且此类实现接口。 我希望使用第二种形式,这种形式更通用,即如果您不使用特定于方法的方法,则可以将其类型声明为接口类型。使用第二种形式,将实现从实现更改为实现接口的其他类将变得更加容易。 编辑: 由于许多SO用户都评论了这两种形式都可以是接受或的任何方法的参数。但是当我声明方法时,我更喜欢接

  • 本文向大家介绍类在Java中可以具有的变量类型是什么?,包括了类在Java中可以具有的变量类型是什么?的使用技巧和注意事项,需要的朋友参考一下 类在Java中可以具有三种不同类型的变量:局部变量,实例变量和类/静态变量。  局部变量 Java中的局部变量可以在方法,代码块 和构造函数中局部声明。当程序控件输入方法,代码块和构造函数时,将创建局部变量;当程序控件离开方法,代码块和构造函数时,将销毁局

  • 我有2种类型的类型类,其中一种类型包含另一种类型 我想这样称呼我的类型类: 但这行不通。 错误:(34,23)找不到参数e的隐式值:com.playground.Valides[com.playground.MyModel1,model.version.type]val v=隐式[Valides[MyModel1,model.version.type]]错误:(34,23)没有足够的隐式方法参数:

  • 在我的应用程序中,如果可能,我想打印出变量的值及其名称。 例如: 所以我想读:int testinteger的值为0 不幸的是,我想,对于基元类型是不可能的。但是像,,等类型也是这样吗。?有可能得到它吗?