Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kotlin - generate toString() for a non-data class

Situation:

I have a class with lateinit fields, so they are not present in the constructor:

class ConfirmRequest() {     lateinit var playerId: String } 

I'd like to have a toString() method with all fields and don't want to write it manually, to avoid boiler print. In Java I'd use the Lombok @ToString annotation for this problem.

Question:

Is there any way to implement it in Kotlin?

like image 705
awfun Avatar asked Nov 29 '16 09:11

awfun


People also ask

Is toString required for all classes?

This is how every class has a toString() method: since Object has a toString() method, then 'children' of Object inherit a toString() method, the children of children of Object inherit a toString() method, and so on. So every class 'automatically' gets a toString() method by inheritance.

Is the toString method required for all classes in Java?

The toString method is implemented by default in the class Object (docs.oracle.com/javase/7/docs/api/java/lang/…). This method is not abstract so you don't have to override it. You can if you want to change the string representation of you object.


1 Answers

The recommended way is to write toString manually (or generate by IDE) and hope that you don't have too many of such classes.

The purpose of data class is to accommodate the most common cases of 85%, which leaves 15% to other solutions.

like image 154
voddan Avatar answered Sep 19 '22 11:09

voddan