Kotlin 단일 예(객체 선언)
object DataProviderManager
는 클래스DataProviderManager
를 만들고 단일 모델을 실현한 것으로 이해할 수 있다.테스트 코드class test {
object DataProviderManager {
fun registerDataProvider(provider: String) {
// ……
}
val allDataProviders: Collection
get() = listOf("a")
}
fun test() {
DataProviderManager.registerDataProvider("")
}
}
class MyClass {
companion object {
var a: String = ""
fun create(): MyClass = MyClass()
}
fun test() {
MyClass.create()
}
}
class MyClass1 {
companion object {
@JvmStatic
var a: String = ""
@JvmStatic
fun create(): MyClass1 = MyClass1()
}
fun test() {
MyClass1.create()
}
}
kotlin이 최종적으로 생성한 자바 코드 Tools->Kotlin->Decompile Kotlin to 자바를 보고 위의 Decompile 단추를 누르면 전환된 자바 파일을 얻을 수 있습니다. 아래와 같습니다.
// MyClass.java
import kotlin.Metadata;
import kotlin.jvm.internal.DefaultConstructorMarker;
import org.jetbrains.annotations.NotNull;
public final class MyClass {
public static final MyClass.Companion Companion = new MyClass.Companion((DefaultConstructorMarker)null);
public final void test() {
Companion.create();
}
public static final class Companion {
@NotNull
public final String getA() {
return MyClass.a;
}
public final void setA(@NotNull String var1) {
Intrinsics.checkParameterIsNotNull(var1, "");
MyClass.a = var1;
}
@NotNull
public final MyClass create() {
return new MyClass();
}
private Companion() {
}
// $FF: synthetic method
public Companion(DefaultConstructorMarker $constructor_marker) {
this();
}
}
}
// test.java
import java.util.Collection;
import kotlin.Metadata;
import kotlin.collections.CollectionsKt;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;
public final class test {
public final void test() {
test.DataProviderManager.INSTANCE.registerDataProvider("");
}
public static final class DataProviderManager {
public static final test.DataProviderManager INSTANCE;
public final void registerDataProvider(@NotNull String provider) {
Intrinsics.checkParameterIsNotNull(provider, "provider");
}
@NotNull
public final Collection getAllDataProviders() {
return (Collection)CollectionsKt.listOf("a");
}
private DataProviderManager() {
INSTANCE = (test.DataProviderManager)this;
}
static {
new test.DataProviderManager();
}
}
}
// MyClass1.java
import kotlin.Metadata;
import kotlin.jvm.JvmStatic;
import kotlin.jvm.internal.DefaultConstructorMarker;
import org.jetbrains.annotations.NotNull;
public final class MyClass1 {
@NotNull
private static String a = "";
public static final MyClass1.Companion Companion = new MyClass1.Companion((DefaultConstructorMarker)null);
public final void test() {
Companion.create();
}
@NotNull
public static final String getA() {
return Companion.getA();
}
public static final void setA(@NotNull String var0) {
Intrinsics.checkParameterIsNotNull(var0, "");
Companion.setA(var0);
}
@JvmStatic
@NotNull
public static final MyClass1 create() {
return Companion.create();
}
public static final class Companion {
@JvmStatic
@NotNull
public final MyClass1 create() {
return new MyClass1();
}
private Companion() {
}
// $FF: synthetic method
public Companion(DefaultConstructorMarker $constructor_marker) {
this();
}
}
}
test.java
을 보면 안의DataProviderManager
가 단례다.object DataProviderManager
는 클래스DataProviderManager
를 만들고 단일 모델을 실현한 것으로 이해할 수 있다.호출DataProviderManager.registerDataProvider("")
에 대응하는 자바 코드는 DataProviderManager.INSTANCE.registerDataProvider("")
흔한 호출 단일 클래스 방법 코드
DataProviderManager.getInstance().registerDataProvider("")
는 instance 획득 방식이 다를 뿐입니다Companion object
는 단례가 아니라 정적 변수로 생각하면 된다.@JvmStatic
를 넣었더니 MyClass1에 private static String a = "";
와 public static final MyClass1 create() {
JVM 플랫폼에서 @JvmStatic 주석을 사용하면 반생 대상의 구성원을 진정한 정적 방법과 필드로 만들 수 있습니다.
어떤 학우회가 내가 어떻게 하나의 단례류를 다른 종류에 사용하느냐고 물었다.
위에서 말한 바와 같이
object className
는 하나의 단일 모델을 실현하는 유형을 정의하는 것과 같다.그래서 우리는 어떤kt 파일에 다음과 같은 코드를 썼다object UserHelper{
var username:String = ""
}
class LoginActivity{
fun doLogin(name:String){
UserHelper.username = name
}
}
로그인한 사용자의 정보를 저장하기 위한
UserHelper
단일 클래스를 만들었습니다.LoginActivity
에서 사용자가 로그인하여 되돌아오는 name
에게 UserHelper
, Decompile kotlin to java에 값을 부여합니다.
public final class LoginActivity {
public final void doLogin(@NotNull String name) {
Intrinsics.checkParameterIsNotNull(name, "name");
UserHelper.INSTANCE.setUsername(name);
}
}
// UserHelper.java
package com.xstudy.assistteacher.module.inclass;
import kotlin.Metadata;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;
public final class UserHelper {
@NotNull
private static String username;
public static final UserHelper INSTANCE;
@NotNull
public final String getUsername() {
return username;
}
public final void setUsername(@NotNull String var1) {
Intrinsics.checkParameterIsNotNull(var1, "");
username = var1;
}
private UserHelper() {
INSTANCE = (UserHelper)this;
username = "";
}
static {
new UserHelper();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.