어떤 class에서 조금 변경된 객체를생성할 때
새로운 subclass의 명시적인 선언 없이 객체 생성
btn.setOnClickListener(new OnClickListener(){
public void onClick(View v){
...
}
});
window.addMouseListener(object : MouseAdapter(){
override fun mouseClicked(e : MouseEvent){}
override fun mouseEntered(e: MouseEvent){}
})
open class A(x:Int){
public open val y:Int = x
}
interface B {...}
val ab: A =object : A(1),B{
override val y = 15
}
다음은 thread를 하나 만들어서, Runnable interface를 상속받은걸 override해서 넘겨주는 코드이다. run()이라는 함수 하나만 override할건데, 코드가 너무 길어진다.
class MyRunnable:Runnable{
override fun run() {
println("hello kotlin")
}
}
fun main(args:Array<String>){
val t=Thread(MyRunnable())
t.run()
}
코틀린에선, 다음과 같이 할 수 있다. 위의 MyRunnable클래스를, main함수의 Thread인자로 넘겨줄 수 있다. 이때 class MyRunnable이라는 이름을 지우고 object키워드를 사용하면 된다.
fun main(args:Array<String>){
val t=Thread(object:Runnable{
override fun run() {
println("hello kotlin")
}
})
t.run()
}
fun main(args:Array<String>){
val data = object{
var x= 111
var y=111
}
println("${data.x}, ${data.y}")
}
class MyClass{
public fun publicFun()=object {
var x = 111
}
private fun privateFun()=object {
var x = 222
}
fun print(){
println(publicFun().x) // 이 경우에 에러가 난다.
println(privateFun().x)// 이 경우는 문제가 없다.
}
}
fun main(args:Array<String>){
MyClass().print()
}
싱글턴
object CountManager{
var count = 0
}
fun main(args: Array<String>){
CountManager.count++
print(CountManager.count) // 이름을 부르면 객체가 반환이 된다.
}싱글턴 + Class method (static) 코틀린엔 static이 없다.
class MyClass{
companion object Factory{
fun create() : MyClass = MyClass()
}
}
원래는 호출 시 MyClass.Factory.MyClass()하고 호출해야ㅎ한다.