Kelas Data di Kotlin

1. Gambaran keseluruhan

Bahasa Kotlin memperkenalkan konsep Kelas Data, yang mewakili kelas sederhana yang digunakan sebagai wadah data dan tidak merangkumi logik tambahan. Ringkasnya, penyelesaian Kotlin memungkinkan kita untuk mengelakkan menulis banyak kod boilerplate.

Dalam artikel ringkas ini, kita akan melihat Kelas Data di Kotlin dan membandingkannya dengan rakan Java mereka.

2. Persediaan Kotlin

Untuk mula menyiapkan projek Kotlin, lihat pengenalan kami mengenai tutorial Bahasa Kotlin .

3. Kelas Data di Jawa

Sekiranya kami ingin membuat entri Filem di Jawa, kami perlu menulis banyak kod plat boiler:

public class Movie { private String name; private String studio; private float rating; public Movie(String name, String studio, float rating) { this.name = name; this.studio = studio; this.rating = rating; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getStudio() { return studio; } public void setStudio(String studio) { this.studio = studio; } public float getRating() { return rating; } public void setRating(float rating) { this.rating = rating; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + Float.floatToIntBits(rating); result = prime * result + ((studio == null) ? 0 : studio.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Movie other = (Movie) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (Float.floatToIntBits(rating) != Float.floatToIntBits(other.rating)) return false; if (studio == null) { if (other.studio != null) return false; } else if (!studio.equals(other.studio)) return false; return true; } @Override public String toString() { return "Movie [name=" + name + ", studio=" + studio + ", rating=" + rating + "]"; } }

86 baris kod. Itu hanya untuk menyimpan hanya tiga bidang dalam kelas sederhana.

4. Kelas Data Kotlin

Sekarang, kami akan membuat kelas Filem yang sama , dengan fungsi yang sama, menggunakan Kotlin :

data class Movie(var name: String, var studio: String, var rating: Float)

Seperti yang kita lihat, itu lebih mudah dan bersih secara besar-besaran. Fungsi konstruktor , toString (), sama dengan (), hashCode (), dan salinan tambahan () dan komponenN () dihasilkan secara automatik.

4.1. Penggunaan

Kelas data dibuat dengan cara yang sama seperti kelas lain:

val movie = Movie("Whiplash", "Sony Pictures", 8.5F)

Kini, sifat dan fungsi tersedia:

println(movie.name) //Whiplash println(movie.studio) //Sony Pictures println(movie.rating) //8.5 movie.rating = 9F println(movie.toString()) //Movie(name=Whiplash, studio=Sony Pictures, rating=9.0)

4.2. Fungsi Salin

Fungsi copy () dibuat, sekiranya kita perlu menyalin objek yang mengubah beberapa sifatnya tetapi menyimpan yang lain tidak berubah.

val betterRating = movie.copy(rating = 9.5F) println(betterRating.toString()) // Movie(name=Whiplash, studio=Sony Pictures, rating=9.5) 

Java tidak menyediakan cara yang jelas dan asli untuk menyalin / mengklon objek. Kita boleh menggunakan antara muka Clonable , SerializationUtils.clone () atau pembangun pengklonan .

4.3. Pengisytiharan yang merosakkan

Deklarasi Merosakkan membolehkan kita memperlakukan sifat objek sebagai nilai individu. Untuk setiap harta di kelas data keluar, komponenN () dihasilkan:

movie.component1() // name movie.component2() // studio movie.component3() // rating

Kita juga boleh membuat pelbagai pemboleh ubah dari objek atau langsung dari fungsi - penting untuk diingat mengenai penggunaan tanda kurung:

val(name, studio, rating) = movie fun getMovieInfo() = movie val(namef, studiof, ratingf) = getMovieInfo()

4.4. Keperluan Kelas Data

Untuk membuat kelas data, kita harus memenuhi syarat berikut:

  • Pembina utama perlu mempunyai sekurang-kurangnya satu parameter
  • Semua parameter pembina utama perlu ditandakan sebagai val atau var
  • Kelas data tidak boleh bersifat abstrak, terbuka, tertutup atau dalaman
  • (sebelum 1.1.) Kelas data hanya boleh melaksanakan antara muka

Sejak 1.1, kelas data boleh meluaskan kelas lain.

Sekiranya kelas yang dihasilkan perlu mempunyai konstruktor tanpa parameter, nilai lalai untuk semua sifat harus ditentukan:

data class Movie(var name: String = "", var studio: String = "", var rating: Float = 0F)

5. Kesimpulan

Kami telah melihat Kelas Data di Kotlin, penggunaan dan keperluannya, jumlah kod boilerplate yang dikurangkan ditulis, dan perbandingan dengan kod yang sama di Java.

Sekiranya anda ingin mempelajari lebih lanjut tentang Kotlin, periksa artikel seperti Kotlin Java Interoperability dan Pengantar Bahasa Kotlin yang telah disebutkan .

Pelaksanaan penuh contoh-contoh ini boleh didapati di projek GitHub kami.