The problem is that the compiler cannot figure out when x is accessed within the lazy’s lambda. Does lazy call the lambda immediately or at a later point. If it is immediately, the field needs a value. The compiler cannot know this. (lazy is not a language feature, it is a common API function).
In case of get() the compiler can infer from the shown code alone that it will not be invoked before initialization is completed.