Kotlin中实体类的创建方式

类的基本格式

class 类名{

}

属性的基本格式

var 属性名字 : 类型

下面是实体类代码

package com.dldw.entity
import java.util.*
class Demo {

 //var 声明的属性可以被二次赋值 val声明的是不可变属性,赋值以后不能在赋值,否则编译报错

 //长整型 64位 注意后面加大写L
 var height: Long? = 0L

 //整型 32 位
 var id : Int?= 0

 //短整型 16位
 var short :Short? =0

 // 8位
 var name : Byte? = null

 //浮点类型 双精度 64位
 var level: Double = 0.0

 //单精度 后面加f
 var levelf: Float = 0.0f

 //时间类型成员属性 ?表示该属性可以为null
 var createTime: Date?=null

 //初始化,kotlin没有new关键字,直接 对象()就是创建一个新对象
 var time: Date?=Date()

 //字符串类型
 var introduction: String? = null

 //布尔类型作为属性
 var isHide: Boolean? = null

 //可变集合作为属性
 var child: MutableList<Demo> ?= null

 // Char是一个单独类型 ,不表示数字,需要用‘'括起来,不然那会报错
  var char : Char?= '1'
}

补充知识:Kotlin中类、构造器、对象

1.Kotlin中类的定义

类的构成:

类的构成由构造函数和初始化代码块、属性(字段)、函数(方法)、内部类(嵌套类)、对象声明五部分组成

//Kotlin中也是使用class关键字创建类的

class Empty

2.创建类的对象

fun main(args: Array<String>) {
 val empty=Empty() //Kotlin中创建对象无new关键字
}

3.创建类的构造器

Kotlin当没有创建构造器时,与Java类似的是,与Java类似的就是当没有显示提供主函数时,Kotlin会为其生成一个无参构造。

/**
 * 构造器 constructor Kotlin中有一个主构造函数和多个二级构造函数
 * 主构造函数是类头的一部分,跟在类名后面
 * 在Java中,构造方法必须和类名相同,而在Kotlin中,是通过constructor关键字来标明的
 */
class Student constructor(name: String, age: Int) {
 private val username: String
 private var age: Int

 //在Kotlin中使用init初始化代码块,它的作用是为了主构造函数服务的,由于主构造函数是放在类首部的,是不能包含任何初始化执行语句的,这是语法规定的,那么这个时候就有了init的用武之地,
 // 我们可以把初始化执行语句放置在此处,为属性进行赋值
 init {
  this.username = name
  this.age = age
 }
}

//写法二 : 可将constructor关键字去掉
class Student2(username: String, age: Int) {
 private val username: String
 private val age: Int

 init {
  this.username = username
  this.age = age
 }
}

//写法三 初始化语句不是必须放在init代码块中的,也可以定义属性的时候初始化
class Student3(username: String, age: Int) {
 private val username: String = username
 private var age: Int = age
}
//写法四,直接在构造器中定义类的属性
class Student4(private val username: String,private val age: Int){}

//次构造函数,与主构造函数的区别就是,次构造函数定义在类中,可以有多个,但是主构造函数只会有一个
class Users{
 private val username:String
 private val age:Int

 constructor(username: String,age: Int){
  this.username=username
  this.age=age
 }
}

4.创建抽象类

用来创建基类,封装常用的方法,以及处理一些共有的逻辑,而这个所谓的基类一般都是抽象类。

Kotlin中抽象类的定义

抽象类,可以理解为类定义了一个模板。所有的子类都是根据这个模板是填充自己的代码。

关键字:abstract

抽象可以分为:抽象类、抽象函数、抽象属性。而一个抽象类和普通类的区别在于抽象类除了可以有其自己的属性、构造函数、方法等组成部分,还包含了抽象函数以及抽象属性。

抽象类的定义及具体的实现类

class TestAbstractA :Lanauge(){
 override var name: String="Kotlin"
 override fun init() {
//  TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
  println("我是${name}")
 }
}

class TestAbstractB :Lanauge(){
 override var name: String
 get() = "Java"
 set(value) {}
 override fun init() {
  // TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
  println("我是${name}")
 }
}

fun main(args: Array<String>) {
 val ta=TestAbstractA()
 val tb=TestAbstractB()
 println(ta.name)
 println(tb.name)
   ta.init()
 tb.init()
}

抽象类的特点:

抽象类本身具有普通类特性,以及组成部分。不过值得注意的是,抽象类不能直接被实例化

其抽象了类的子类必须全部重写带abstract修饰的属性和方法。

抽象成员只有定义,没有实现。都有abstract修饰符修饰。

抽象类是为其子类定义了一个模板。不同是类实现不同的功能

***抽象类还可以继承自一个继承类

//使用open,这个类声明有open属性,可以被其他类继承
open class Base {
 open fun init() {}
}

//抽象类还可以继承自一个继承类
abstract class Lanauge2 : Base() {
 override fun init() {
  super.init()
 }
 abstract class Name() {} //抽象类的嵌套
}

5.嵌套类

/**
 * 嵌套类
 */
class Other {
 val numOuther = 1

 class Nested{
  fun init(){
   println("执行了init方法")
  }
 }
}

//嵌套类的使用

 Other.Nested().init() //调用格式为:外部类.嵌套类().嵌套类 方法/属性

6.嵌套内部类

//嵌套内部类
class Othert{
 val mumOther=1

 inner class InnerClass{
  val name="InnerClass"
  fun init(){
   println("我是内部类")
  }
 }
}
在主函数中调用Othert().InnerClass().init() // 调用格式为:外部类().内部类().内部类方法/属性

7.匿名内部类的定义

fun main(args: Array<String>) {
 //测试内部类
 val inner=Inner()
 inner.setOnClickListener(object : OnClickListener{
  override fun onItemClick(str: String) {
   println(str)
  }
 })
 inner.testListener()
}
class Inner{
 //lateini(延迟加载) 只能修饰, 非kotlin基本类型
 //因为Kotlin会使用null来对每一个用lateinit修饰的属性做初始化,而基础类型是没有null类型,所以无法使用lateinit。
 lateinit private var listener:OnClickListener
 fun setOnClickListener(listener: OnClickListener){
  this.listener=listener
 }

 fun testListener(){
  listener.onItemClick("我是匿名内部类的测试方法")
 }
}

interface OnClickListener{
 fun onItemClick(str:String)
}

8.定义局部类

class Local{ // 外部类
 val numOther = 1

 fun partMethod(){
  var name : String = "partMethod"

  class Part{
   var numPart : Int = 2

   fun test(){
    name = "test"
    numPart = 5
    println("我是局部类中的方法")
   }
  }

  val part = Part()
  println("name = $name \t numPart = " + part.numPart + "\t numOther = numOther")
  part.test()
  println("name = $name \t numPart = " + part.numPart + "\t numOther = numOther")
 }
}

fun main(args: Array<String>) {
 // 测试局部类
 Local().partMethod()
}

以上这篇Kotlin中实体类的创建方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Kotlin中常见的符号详解

    前几年的Google I/O大会上,Google正式宣布,Kotlin将会成为Android开发的官方支持语言.除了Android外,Kotlin还可以完全作为服务端开发的语言,比如在未来的Spring 5就将对Kotlin提供强大的支持.以及浏览器编程语言,与JS进行交互. Kotlin是一门静态语言,支持多种平台,包括移动端.服务端以及浏览器端,此外,Kotlin还是一门融合了面向对象与函数式编程的语言,支持泛型.安全的空判断,并且Kotlin与Java可以做到完全的交互. 现在介绍Kotl

  • 解决Kotlin 类在实现多个接口,覆写多个接口中相同方法冲突的问题

    一.首先来看一个例子 package net.println.kotlin.chapter4 /** * @author:wangdong * @description:类实现接口的冲突问题 */ interface B{ fun x(): Int = 1 } interface C{ fun x(): Int = 0 } /**一个类实现了两个接口,两个接口中的方法相同,这个类在覆写的时候就会出现冲突*/ class D: B,C{ //当下面两个方法同时存在的时候,就会报方法相同的冲突 ov

  • Kotlin 使用Lambda来设置回调的操作

    使用Kotlin的Lambda表达式,我们可以抛弃回调接口的使用.只需设置希望后面会被调用的函数即可. 示例如下 新建一个Kotlin类 class MyBean { fun testcallback1(callback: (String) -> Unit) { callback.invoke("这是回调的内容") } fun testcallback2(value1: Int, value2: Int, callback: (Int, Int) -> Int): Int

  • Kotlin 匿名类实现接口和抽象类的区别详解

    我就废话不多说了,还是上代码吧 接口: interface OnBind { fun onBindChildViewData(holder: String, itemData: Any, position: Int) } lesson.does(object : OnBind { override fun onBindChildViewData(holder: String, itemData: Any, position: Int) { println(holder + itemData +

  • Kotlin中实体类的创建方式

    类的基本格式 class 类名{ } 属性的基本格式 var 属性名字 : 类型 下面是实体类代码 package com.dldw.entity import java.util.* class Demo { //var 声明的属性可以被二次赋值 val声明的是不可变属性,赋值以后不能在赋值,否则编译报错 //长整型 64位 注意后面加大写L var height: Long? = 0L //整型 32 位 var id : Int?= 0 //短整型 16位 var short :Short

  • Kotlin实现在类里面创建main函数

    1.创建在class块外面: class Test{ } /** 我是main入口函数 **/ fun main(args: Array<String>) { var test=Test(); } 这样是一种方式,但是细心的童鞋可能会发现一个问题,目录里面的文件图标是灰色的,而且这种写法看上去怪怪的,有强迫症的可能会接受不了: 2.创建在class里面: class Test{ companion object { /** 我是main入口函数 **/ @JvmStatic fun main(

  • Java中实体类为什么要实现Serializable序列化的作用

    客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间.如果在某一时间段内访问站点的用户很多,web服务器内存中就会积累大量的HttpSession对象,消耗大量的服务器内存,即使用户已经离开或者关闭了浏览器,web服务器仍要保留与之对应的HttpSession对象,在他们超时之前,一直占用web服务器内存资源. web服务器通常将那些暂时不活动但未超时的HttpSession对象转移到文件

  • 解决Spring Data Jpa 实体类自动创建数据库表失败问题

    目录 Spring Data Jpa 实体类自动创建数据库表失败 找了半天发现是一个配置的问题 可能导致JPA 无法自动建表的问题汇总 1.没加@Entity或引错Entity所在包 2.jpa配置中ddl-auto未设置update 3.实体类的包不是启动程序所在包的子包 4.mysql配置问题 5.依赖不全 6.实体类间关系错误 7.启动类注解问题 8.其他问题 Spring Data Jpa 实体类自动创建数据库表失败 先说一下我遇到的这个问题,首先我是通过maven创建了一个spring

  • Mybatis中实体类属性与数据列表间映射方法介绍

    Mybatis不像Hibernate中那么自动化,通过@Column注解或者直接使用实体类的属性名作为数据列名,而是需要自己指定实体类属性和 数据表中列名之间的映射关系,这一点让用惯了Hibernate的人很不习惯,所幸经过探索找到了建立映射关系的三种办法,其中总也有比较 简单的. 首先先定义一个实体类,如下: public class User implements Serializable { private Integer userId; private String userName;

  • kotlin中EditText赋值Type mismatch方式

    在kotlin中可以不用使用findViewById来初始化控件,但是在给EditText赋值时使用editText.text = "value"时会提示Type mismatch,这是因为EditText在推断types时出现问题. 为了避免types不匹配,使用Editable类的Factory内部类,来解决这个问题. etStartTime.text = Editable.Factory.getInstance().newEditable("test") 补充

  • Android项目中实体类entity的作用详解

    估计很多入门安卓的朋友对entity很困惑,为什么要写实体类?有什么用?写来干什么? 对于实体类的理解我入门的时候也是困惑了好久,后面用多了才慢慢理解,这篇博客就当复习和笔记. Java中entity(实体类)的写法规范 在日常的Java项目开发中,entity(实体类)是必不可少的,它们一般都有很多的属性,并有相应的setter和getter方法.entity(实体类)的作用一般是和数据表做映射.所以快速写出规范的entity(实体类)是java开发中一项必不可少的技能. 在项目中写实体类一般

  • SpringBoot+jpa配置如何根据实体类自动创建表

    目录 jpa配置根据实体类自动创建表 1.配置文件application.properties 2.pom.xml引入包 3.编写实体类 4.运行项目 5.针对项目启动以后数据库并未生成数据库表问题 jpa根据Entry自动生成表 1.加入依赖 2.配置 application.yml 3. 创建Entity jpa配置根据实体类自动创建表 1.配置文件application.properties spring.datasource.url=jdbc:mysql://localhost:3306

  • Android中AlertDialog的六种创建方式

     创建AlertDialog的步骤: 1.创建AlertDialog.Builder对象 2.调用Builder对象的setTitle方法设置标题,setIcon方法设置图标 3.调用Builder相关方法如setMessage方法.setItems方法.setSingleChoiceItems方法.setMultiChoiceItems方法.setAdapter方法.setView方法设置不同类型的对话框内容. 4.调用setPositiveButton.setNegativeButton.s

  • IDEA中实体类(POJO)与JSON快速互转问题

    目录 POJO TO JSON JSON TO POJO POJO TO JSON 下载POJO to Json插件找到目录File->Settings->Plugins 点击Installed下载勾选上一般插件安装之后重启IDEA即可生效 找到我们要转换的实体类,鼠标右击类名,选择POJO To Json 然后就去我们想要的地方直接粘贴就行了 JSON TO POJO 下载GsonFormatPlus插件(基于 GsonFormat 做的二次开发)找到目录File->Settings-

随机推荐