Kotiln 단일 모드

Kotlin 에서 자주 사용 하 는 다섯 가지 문법
1. 클래스 를 불 러 올 때 단리 자바 만 들 기
public class Config{
 private static Config INSTANCE=new Config();
 private Config(){
 //    
 }
 public static Config getInstance(){
 return INSTANCE;
 }
}

Kotlin 실현
object Config{}

위의 글 씨 는 간단 하고 거 칠 며, 클래스 를 불 러 올 때 직접 만 듭 니 다. 그러나 시작 프로 세 스 를 늦 출 수 있 습 니 다. 따라서 사용 할 때 다시 불 러 올 수 있 습 니 다. 예 를 들 어 아래 의 글 씨 를 사용 할 수 있 습 니 다.
2. 게 으 른 로 딩 문법 자바 구현
public class Config{
 private static Config INSTANCE;
 private Config(){
 //    
 }
 public static Config getInstance(){
 if(null==INSTANCE){
 INSTSANCE=new Config();
 }
 return INSTANCE;
 }
}

Kotlin 실현
public class Config{
 companion object{
 val instance by lazy(LazyThreadSafetyMode.NONE){
  Config()
 }
 }
}

게 으 른 로 딩 은 로 딩 클래스 를 만 드 는 것 을 피 할 수 있 지만 스 레 드 가 안전 하지 않 습 니 다. 여러 클래스 에서 단 리 를 얻 으 면 여러 개의 단 리 를 만 들 수 있 습 니 다. 따라서 단 리 를 만 들 때 라인 잠 금 을 추가 할 수 있 습 니 다. 예 를 들 어 다음 과 같은 방법 입 니 다.
3. 동기 화 잠 금 쓰기 자바 구현
public class Config{
 private static Config INSTANCE;
 private Config(){
 //    
 }
 public static synchronized Config getInstance(){
 if(null==INSTANCE){
  INSTANCE=new Config();
 }
 return INSTANCE;
 }
}

Kotiln 실현
class Config{
 companion object{
 private var instance:Config?=null
 @Synchronized
 fun get():Config{
  if(nnull==instance) instance=Config()
  return instance
 }
 }
}

동기 화 잠 금 은 단리 가 중복 되 지 않도록 하지만 동기 화 잠 금
4. 이중 검증 쓰기 자바 구현
public class Config{
 private static volatile Config INSTANCE;
 private Config(){
 //    
 }
 public static Config getInstance(){
 if(null==INSTANCE){
  synchronized(Config.class){
  if(null==INSTANCE){
   INSTSANCE=new Config();
  }
  }
 }
 return INSTANCE;
 }
}

Kotlin 실현
class Config{
 companion object{
 val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED){
  Config()
 }
 }
}

5. 정적 내부 클래스 표기 법 은 클래스 를 불 러 올 때 단 리 를 초기 화 하 는 것 을 피 하 는 동시에 동기 화 잠 금 문 제 를 가상 컴퓨터 에 맡 기 는 것 이 가장 우아 한 표기 법 이 라 고 할 수 있 습 니 다. 자바 와 Kotlin 표기 법 은 거의 똑 같 습 니 다 자바 실현
public class Config{
 private static class Helper{
 private static Config INSTANCE=new Config();
 }
 private Config(){
 //    
 }
 public static Config getInstance(){
 return Helper.INSTANCE;
 }
}

Ktotiln 실현
class Config private constructor(){
 companion object{
 fun getInstance = Helper.instance
 }
 private object Helper{
 val instance = Config()
 }
}

좋은 웹페이지 즐겨찾기