수색…


DTO 만들기 (POJO / POCO)

kotlin의 데이터 클래스는 데이터를 보유하기 만하면되는 클래스입니다. 이러한 클래스는 data 로 표시됩니다.

data class User(var firstname: String, var lastname: String, var age: Int)

위의 코드는 다음과 같이 자동 생성 된 User 클래스를 만듭니다.

  • 모든 프로퍼티의 getter와 setter ( val 의 getter 만)
  • equals()
  • hashcode()
  • toString()
  • copy()
  • componentN() ( N 은 선언 된 순서대로 해당 속성 임)

함수와 마찬가지로 기본값도 지정할 수 있습니다.

data class User(var firstname: String = "Joe", var lastname: String = "Bloggs", var age: Int = 20)

자세한 내용은 여기 데이터 클래스를 참조하십시오 .

목록 필터링

val list = listOf(1,2,3,4,5,6)

//filter out even numbers

val even = list.filter { it % 2 == 0 }

println(even) //returns [2,4]

public 생성자에 클래스를 제공하지 않고 클래스에 위임합니다.

클래스위임 하려고하지만 생성자 매개 변수에 위임 클래스를 제공하지 않으려한다고 가정합니다. 대신 생성자 호출자가 알지 못하게 private하게 구성하려고합니다. 클래스 위임이 생성자 매개 변수에만 위임 할 수 있으므로 처음에는 불가능한 것처럼 보일 수 있습니다. 그러나, 이 대답 에서 주어진대로 그것을 할 수있는 방법 이 있습니다 :

class MyTable private constructor(table: Table<Int, Int, Int>) : Table<Int, Int, Int> by table {

    constructor() : this(TreeBasedTable.create()) // or a different type of table if desired

}

이것으로 MyTable 의 생성자를 MyTable() 과 같이 호출 할 수 있습니다. MyTable 위임 한 Table<Int, Int, Int> 은 비공개로 만들어집니다. 생성자 호출자는 그것에 대해 아무것도 모릅니다.

이 예제는 이 SO 질문 에 기초합니다.

Kotlin의 Serializable 및 serialVersionUid

Kotlin에서 클래스의 serialVersionUID 를 만들려면 클래스의 컴패니언 개체에 멤버를 추가하는 것과 관련된 몇 가지 옵션이 있습니다.

가장 간결한 바이트 코드 는 포함하는 클래스 (이 경우 MySpecialCase 에서 개인 정적 변수가 될 private const val 에서 MySpecialCase .

class MySpecialCase : Serializable {
    companion object {
        private const val serialVersionUID: Long = 123
    }
}

또한 직렬화에 필요하지 않은 getter / setter 메소드가있는 부작용 이있는이 양식을 사용할 수 있습니다.

class MySpecialCase : Serializable {
    companion object {
        private val serialVersionUID: Long = 123
    }
}

이것에 의해 정적 필드가 작성됩니다 만, getSerialVersionUID 는 컴패니언 오브젝트에 불필요합니다.

class MySpecialCase : Serializable {
    companion object {
        @JvmStatic private val serialVersionUID: Long = 123
    }
}  

이것에 의해 정적 필드가 작성됩니다 만, getSerialVersionUID 는 포함하는 클래스 MySpecialCase 에 정적 getter가 작성되어 불필요합니다.

하지만 모두 serialVersionUIDSerializable 클래스에 추가하는 방법으로 작동합니다.

Kotlin의 유창한 방법

Kotlin의 유창한 메소드는 Java와 동일 할 수 있습니다.

fun doSomething() {
   someOtherAction()
   return this
}

그러나 다음과 같은 확장 기능을 만들어 더 기능적으로 만들 수도 있습니다.

fun <T: Any> T.fluently(func: ()->Unit): T {
    func()
    return this
}

그러면 더 명확하게 유창한 기능을 사용할 수 있습니다.

fun doSomething() {
   return fluently { someOtherAction() }
}

let을 사용하거나 nullable 객체 작업을 단순화하십시오.

let 코 틀린에하는 것은에 호출 된 객체로부터 바인딩 지역 만듭니다. 예:

val str = "foo"
str.let {
    println(it) // it
}  

그러면 "foo" 가 인쇄되고 Unit 을 반환합니다.

차이 letalso 당신이에서 어떤 값을 반환 할 수 있다는 것입니다 let 블록. also 다른 한편으로는 항상 Unit reutrn 것입니다.

이제 이것이 왜 유용한 지 묻습니다. 당신 때문에 반환 할 수있는 방법을 호출하는 경우 null 그 반환 값이없는 경우에만 몇 가지 코드를 실행하려면 null 사용할 수 letalso 이 같은 :

val str: String? = someFun()
str?.let {
    println(it)
}

이 코드는 strnull 이 아닌 경우에만 let 블록을 실행합니다. null 안전 연산자 ( ? )에 유의하십시오.

적용을 사용하여 객체를 초기화하거나 메소드 체인을 달성합니다.

문서는 apply 다음과 같이 말한다 :

로 지정된 함수 블록 호출 this 리시버와 같은 값을 리턴 this 값입니다.

kdoc 그렇게 도움이되지 않습니다 동안 apply 정말로 유용한 기능입니다. 쉽게 설명하자면이에 apply 있는 범위 설정 this 당신이 호출 된 객체에 바인딩 apply 에 있습니다. 이렇게하면 나중에 객체를 반환 할 때 여러 메소드를 호출해야 할 때 일부 코드를 사용할 수 있습니다. 예:

File(dir).apply { mkdirs() }

이것은 다음과 같이 쓰는 것과 같습니다 :

fun makeDir(String path): File {
    val result = new File(path)
    result.mkdirs()
    return result
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow