Kotlin类型铸造

时间:2020-01-03 10:32:37

标签: android kotlin casting

即使所有三个都产生相同的结果,以下三个之间有什么区别?

import * as React from 'react';
import { storiesOf, addParameters, addDecorator } from '@storybook/react';
import { setOptions } from '@storybook/addon-options';
import { themes } from '@storybook/theming';
import './demos/helpers/index.css';
import { Toolkit } from '@projectstorm/react-canvas-core';

Toolkit.TESTING = true;

addParameters({
    options: {
        theme: themes.dark,
    }
});

setOptions({
    name: 'STORM React Diagrams',
    url: 'https://github.com/projectstorm/react-diagrams',
    addonPanelInRight: true
});

addDecorator(fn => {
    Toolkit.TESTING_UID = 0;
    return fn();
});

import demo_client from './demos/client-demo-simple';
import demo_simple from './demos/demo-simple';
import demo_flow from './demos/demo-simple-flow';
import demo_performance from './demos/demo-performance';
import demo_locks from './demos/demo-locks';
import demo_grid from './demos/demo-grid';
import demo_listeners from './demos/demo-listeners';
import demo_zoom from './demos/demo-zoom-to-fit';
import demo_labels from './demos/demo-labelled-links';
import demo_dynamic_ports from './demos/demo-dynamic-ports';
import demo_alternative_linking from './demos/demo-alternative-linking';
import demo_custom_delete_keys from './demos/demo-custom_delete_keys';

storiesOf('Simple Usage', module)
    .add('Client Demo', demo_client)

2 个答案:

答案 0 :(得分:4)

让我解释一下它的基本知识!

val绑定= DataBindingUtil.inflate(LayoutInflater.from(view.context),R.layout.my_layout, null,false)

binding的类型将是RHS返回的任何类型。唯一可能返回的错误是运行时错误,指出 null不能为非null类型的值

val绑定:MyBinding = DataBindingUtil.inflate(LayoutInflater.from(view.context),R.layout.my_layout, null,false)

与上述相同,但如果两种类型都不匹配,可能会抛出编译时错误,并说Type mismatch. Required: XXX Found: YYY

val绑定= DataBindingUtil.inflate(LayoutInflater.from(view.context),R.layout.my_layout, null,false)作为MyBinding

这应该主要用于派生类,但在正常情况下也可以使用。如果转换不成功,这不会抛出任何编译时错误,但是会抛出运行时异常

答案 1 :(得分:2)

没有真正的区别。完整版本为

val binding: MyBinding = DataBindingUtil.inflate<MyBinding>(...)

,但是如果忽略了变量类型(: MyBinding),则可以从type参数中推断出来,反之亦然。 (由于这种特殊方法的签名,在这种情况下它们是相同的。)

Kotlin还允许从即时转换中推断类型参数,就像您的第三个示例一样。 IIRC的引入是为一个非常特定的用例(一种用于返回超类型但后来成为通用类型的方法)而提出的,没有真正的理由使用它。