首页 文章

Groovy - 作为vs(演员)

提问于
浏览
8

以下两种铸造方法之间是否存在实际差异:

result.count = (int) response['hits']['total']

VS

result.count = response['hits']['total'] as int

我正在使用 @CompileStatic 并且编译器希望我进行演员表 - 这让我想知道这两个符号之间是否存在任何性能或实际差异 .

1 回答

  • 9

    主要区别在于使用继承的概念来进行转换,其中 as 运算符是可能使用或不使用继承概念的自定义转换器 .

    Which one is faster?
    这取决于转换器方法的实现 .

    施法

    嗯,所有的转换实际上意味着将一个特定类型的对象和“将其转换为”另一个对象类型 . 此过程称为转换变量 .

    例如:

    Object object = new Car();
    Car car = (Car)object;
    

    正如我们在示例中看到的那样,我们将类 Object 的对象转换为 Car ,因为我们知道该对象是 Car 内向的实例 .

    但我们不能这样做,除非 CarBicycle 的子类,实际上没有任何意义(在这种情况下你会得到 ClassCastException ):

    Object object = new Car();
    Bicycle bicycle = (Bicycle)object;
    

    作为运营商

    在Groovy中,我们可以覆盖方法asType()以将对象转换为另一种类型 . 我们可以在代码中使用方法asType()来调用转换,但我们甚至可以缩短它并将其用作 .

    在groovy中使用 as 运算符时,左手操作数必须实现此方法:

    Object asType(Class clazz) {
            //code here
        }
    

    正如您所看到的,该方法接受 Class 的实例并实现自定义转换器,因此基本上您可以将 Object 转换为 CarCar 转换为 Bicycle 如果您想要全部取决于您的实现 .

相关问题