Kotlin 베이스 - object
7926 단어 Kotlin
1. Object 표현식
익명 내부 클래스를 만드는 형식:
object: ClassName {...}
// Handler
val handler: Handler = object: Handler() {
override fun handleMessage(msg: Message?) {
super.handleMessage(msg)
when(msg?.what) {
1 -> "Expression1"
2 -> "Expression2"
}
}
}
/*
* , Anko ;
* TextView(ctx).setOnClickListener {
* //...
* }
*/
TextView(ctx).setOnClickListener(object: View.OnClickListener{
override fun onClick(v: View?) {
//...
}
})
2. object 개체 선언
2.1 Object 객체 직접 선언
자바에서 단일한 성명은 게으름뱅이식, 굶주림식, 정적 내부류, 매거 등 여러 가지 방식을 가질 수 있다.Kotlin에서 단일 모드의 실현은
object
키워드 하나만 있으면 된다.// Kt : object ,
object SingleObject {
fun test() {
//...
}
}
// : . ()
class Main {
fun test() {
SingleObject.test() // class , SingleObject.INSTANCE.test();
}
}
// ---------------- ---------------
//Kotlin class :
public final class SingleObject {
public static final SingleObject INSTANCE;
public final void test() {
}
private SingleObject() {
INSTANCE = (SingleObject)this;
}
static {
new SingleObject();
}
}
2.2 인터페이스(추상 클래스)의 대상 성명을 계승한다
// Kt
object MyMachine: Machine() {
override fun start() {
//...
}
}
abstract class Machine {
abstract fun start()
open fun stop() {}// open , final , ;
}
// ---------------- ---------------
// class
public final class MyMachine extends Machine {
public static final Single INSTANCE;
public void start() {
String var1 = "not implemented";
throw (Throwable)(new NotImplementedError("An operation is not implemented: " + var1));
}
private MyMachine() {
INSTANCE = (MyMachine)this;
}
static {
new MyMachine();
}
}
public abstract class Machine {
public abstract void start();
public void stop() {}
}
2.3 클래스 내 개체 선언
class Single {
object Manage {// , inner
fun execute() {
//...
}
}
}
// ---------------- ---------------
public final class Single {
//
public static final class Manage {
public static final Single.Manage INSTANCE;
public final void execute() {}
private Manage() {
INSTANCE = (Single.Manage)this;
}
static {
new Single.Manage();
}
}
}
3. 반려자 Companion Object
반생 대상은 클래스에 성명된 일반 대상입니다. 이름 (기본값
Companion
을 사용할 수 있으며, 인터페이스나 확장 함수나 속성을 실현할 수 있습니다.3.1 일반적인 반생 대상
class MyClass {
companion object Factory {
val url = ""
fun create(): MyClass = MyClass()
}
}
// , . .
MyClass.url
MyClass.create()
3.2 반생 대상에서 인터페이스 구현
interface Factory {
fun create(): T
}
class MyClass {
//
companion object : Factory {
val url = ""
//
override fun create(): MyClass = MyClass()
}
}
//
class Main {
fun test() {
setFactory(MyClass) // MyClass , MyClass
}
fun setFactory(factory: Factory) {
factory.create()
}
}
3.3 반생 대상의 확장
반생 대상의 확장은 일반 클래스의 확장과 일치합니다
class MyClass {
companion object Factory {
fun create(): MyClass = MyClass()
}
}
//
fun MyClass.Factory.fun_name() = ... ...
//
MyClass.Factory.fun_name()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
머티리얼 디자인 도입 직후에 할 일안드로이드 프로젝트에 머티리얼 디자인을 도입한 후에 할 일을 적는다. Android 프로젝트를 만든 후 Hello world에 대해 수행합니다. 머티리얼 디자인을 도입하기 위해, build.gradle 를 이하와 같...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.