Let's review the two.
----------
##Configuration##
###Kotlin Android Extensions###
1. Import appropriate layout synthetic extensions: `import kotlinx.android.synthetic.main.<layout>.*`
2. Reference views in code via their ids: `textView.text = "Hello, world!"`. These extensions work on: `Activities`, `Fragments` and `Views`.
###View Binding###
1. Create binding reference inside your class: `private lateinit var binding
YourClassBinding`
2. Inflate your binding `binding = YourClassBinding.inflate(layoutInflater)` inside `Activity`'s `onCreate` and call `setContentView(binding.root)`, or inflate it in `Fragment`'s `onCreateView` then return it: `return binding.root`
3. Reference views in code via binding using their ids `binding.textView.text = "Hello, world!"`
----------
##Type safety##
**Kotlin Android Extensions** and **ViewBinding** are type safe by definition, because referenced views are already casted to appropriate types.
----------
##Null safety##
**Kotlin Android Extensions** and **ViewBinding** are both null safe. **ViewBinding doesn't have any advantage here**. In case of **KAE**, if view is present only in some layout configurations, IDE will point that out for you:
[![enter image description here][1]][1]
So you just treat it as any other nullable type in Kotlin, and the error will disappear:
[![enter image description here][2]][2]
----------
##Applying layout changes##
In case of **Kotlin Android Extensions**, layout changes instantly translate to generation of synthetic extensions, so you can use them right away. In case of **ViewBinding**, you have to build your project
----------
##Incorrect layout usage##
In case of **Kotlin Android Extensions**, it is possible to import incorrect layout synthetic extensions, thus causing `NullPointerException`. The same applies to **ViewBinding**, since we can import wrong `Binding` class. Although, it is
more probable to overlook incorrect import than incorrect class name, especially if layout file is well named after `Activity`/`Fragment`/`View`, so **ViewBinding** has upper hand here.
----------
##Summary of KAE vs ViewBinding##
- **Type safety** - Draw.
- **Null safety** - Draw.
- **Boilerplate code** - **KAE** wins. From Kotlin Android Extensions [documentation](
[To see links please register here]
):
> The Kotlin Android Extensions plugin allows us to obtain the same
> experience we have with some of these libraries, without having to add
> any extra code.
- **Applying layout changes** - **KAE** wins. Changes are instant in contrast to **ViewBinding**.
- **Incorrect layout usage** - **ViewBinding** wins
----------
I think there is big misconception about **ViewBinding** being replacement for **KAE**. People hear big keywords and repeat them without verifying it beforehand. Sure, **ViewBinding** is best option for Java development right now (replacement for **ButterKnife**), but there is no or little advantage over **KAE** in Kotlin (see **Incorrect layout usage** section).
**Side note:**
I'm sure DataBinding people will like ViewBinding :)
[1]:
[2]: