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에 따라 라이센스가 부여됩니다.