방 - 제공된 유형 변환기 설명

5686 단어
이 블로그 게시물은 제공되는 유형 변환기라는 새로 개발된 Room의 기능에 대해 설명합니다. 또한 GitHub를 통해 AndroidX에 기여하는 프로세스에 대한 간략한 설명도 포함되어 있습니다.

유형 변환기 란 무엇입니까?



Room을 사용하여 복잡한(기본이 아닌) 데이터에 액세스하려면 Type Converter을 사용해야 합니다. 유형 변환기는 @TypeConverter 주석이 달린 메서드입니다. 정확히 하나의 매개변수를 받아야 하며 void가 아닌 반환 유형을 가져야 합니다. Room은 이를 호출할 수 있어야 하므로 이러한 메서드는 다음 조건 중 하나도 충족해야 합니다.
  • 은 정적이어야 합니다
  • .
  • 또는 내부에 선언해야 합니다Kotlin object.
  • 또는 인수가 없는 공용 생성자가 있는 클래스 내부에서 선언되어야 합니다.

  • 이는 @TypeConverter 주석이 달린 메서드가 포함된 클래스에 종속성을 전달할 방법이 없음을 의미합니다. 이issue의 작성자는 Json 직렬 변환기를 유형 변환기에 전달하는 예를 언급했습니다. 이를 수행하는 유일한 옵션은 전역 상태를 사용하는 것이었습니다. 그러나 이제 새롭고 더 나은 방법이 있습니다.

    제공되는 유형 변환기



    Room2.3.0-alpha03에는 앞서 언급한 문제에 대한 솔루션인 제공된 유형 변환기라는 새로운 기능이 포함되어 있습니다. 룸은 @TypeConverter 주석이 달린 메서드를 호출하기에 충분한 정보가 있는지 컴파일 타임에 확인합니다. 가능하지 않으면 컴파일이 실패합니다. 제공된 유형 변환기의 아이디어는 개발자가 유형 변환기의 인스턴스화를 제어하고 다른 클래스처럼 처리할 수 있는 가능성을 제공한다는 것입니다. 이는 Type Converter 클래스에 @ ProvidedTypeConverter 주석을 달아 Room이 이 주석이 없는 변환기에 대해 수행하는 컴파일 시간 검사 중 일부를 건너뛰도록 지시함으로써 달성됩니다. 개발자는 addTypeConverter 에서 새로운 Room.databaseBuilder 메서드를 호출하여 이러한 변환기의 인스턴스를 Room에 수동으로 추가해야 합니다. 그렇지 않으면 Room은 변환기를 사용할 수 없으며 런타임에 예외가 발생합니다.

    다음은 제공된 유형 변환기 기능을 사용하여 유형 변환기에 종속성을 전달하는 간단한 예입니다.

    // Annotate converter to skip compile time validation
    @ProvidedTypeConverter
    class ExampleConverter(private val dependency: Foo) {
        @TypeConverter
        fun fromString(value: String?): Bar {
            return dependency.toBar(value)
        }
    
        @TypeConverter
        fun barToString(bar: Bar?): String {
            return dependency.toString(bar)
        }
    }
    
    // Create or inject ExampleConverter instance and 
    // pass it to RoomDatabase builder
    val exampleConverterInstance = ExampleConverter(Foo());
    
    db = Room.databaseBuilder(...)
            .addTypeConverter(exampleConverterInstance)
            .build();
    


    AndroidX에 기여



    얼마 전 AndroidX는 GitHub으로 푸시되었는데, 이는 누구나 AOSP를 당기고 도구를 배우지 않고도 기여할 수 있음을 의미합니다. 이 게시물을 작성하는 시점에서 Room, Paging, Work Manager, Fragment, Activity 및 Navigation의 6개 프로젝트가 기여를 위해 열려 있습니다. 이슈 트래커에 버그 현상금hotlist이 있습니다. 여기에는 외부 기여자가 선택할 수 있는 버그 및 기능 목록이 포함되어 있습니다. 프로세스는 다음과 같습니다.
  • 읽기 Contribution Guide .
  • 버그 현상금 핫리스트에서 특히 흥미로운 티켓 찾기.
  • 해당 티켓에 댓글을 달고 자원하여 티켓을 처리합니다.
  • 답장을 기다리며 그동안 조사를 시작했다.
  • 그것이 기능이라면 다음 단계는 아마도 아이디어를 설명하는 디자인 문서를 작성하는 것입니다. Here은 제공된 유형 변환기 기능에 대한 것입니다.
  • 버그라면 간단히 코딩을 시작하세요.
  • GitHub에서 PR을 만들고 검토를 기다리고 있습니다.

  • 차단기가 있거나 어디서부터 시작해야 할지 명확하지 않은 경우 관리자가 도움을 줄 수 있습니다. 그들은 매우 도움이되고 반응이 빠르기 때문에 그들에게 연락하는 것을 두려워 할 필요가 없습니다!

    기여 과정에서 많은 것을 배웠고 작업하는 것이 즐거웠습니다. 또한 AndroidX API를 설계하는 데 얼마나 많은 주의를 기울이고 있는지 확인할 수 있었기 때문에 눈을 뗄 수 없는 경험이었습니다. 저는 룸 코드를 본 적이 없고 주석 처리에 대한 경험이 거의 없었지만 제가 할 수만 있다면 여러분도 할 수 있습니다! 외부 기여가 많을수록 기여를 위해 더 많은 프로젝트가 열립니다.

    나는 그것을 할 수 없었을 것입니다. 그리고 – 이 게시물을 교정해 주시고 지원해주셔서 감사합니다!

    좋은 웹페이지 즐겨찾기