Lateinits vs. nullables

As you can see from the two properties in this class:

@inject lateinit var foo: Foo
@set:Inject var bar: Bar? = null

Both are public, or so I thought. I’m wondering why I would need to add @set in one of them. In the decompiled Java code:

@inject @NotNull
public Foo foo;
@Nullable
private Bar bar;

Is there a reason why lateinits are public, and nullables are not? I’m guessing it’s to make sure you can’t directly interact with the nullable.

Any light shed on this is greatly appreciated.