스칼라. 클래스를 제네릭으로 만들기

많이 알지 못함

Avro에 직렬화하는 각 클래스 유형에 대해 내 프로젝트에 계속해서 나타나는이 코드가 있습니다.

class FooKryoRegistrator extends KryoRegistrator {
  override def registerClasses(kryo: Kryo) {
    kryo.register(classOf[Foo], SpecificRecordBinarySerializer(classTag[Foo]))    
    kryo.register(classOf[GenericData.Array[_]], new SpecificInstanceCollectionSerializer(classOf[java.util.ArrayList[_]]))
  }
}

이제 내 프로젝트의 모든 엔터티 (Foo, Bar, Baz .....)에 대해이 Registrator 클래스를 작성하는 대신이 일반을 만드는 것이 더 나을 것이라고 생각했습니다. 그래서 나는

class GenericKryoRegistrator[T] extends KryoRegistrator {
  override def registerClasses(kryo: Kryo) {
    kryo.register(classOf[T], SpecificRecordBinarySerializer(classTag[T]))    
    kryo.register(classOf[GenericData.Array[_]], new SpecificInstanceCollectionSerializer(classOf[java.util.ArrayList[_]]))
  }
}

하지만 컴파일 시간 오류가 발생합니다.

class type required but T found

이 오류를 검색 한 결과 클래스 대신 ClassTag를 사용해야한다는 권장 사항을 발견했습니다. 그래서 구현을 다음과 같이 변경했습니다.

class GenericKryoRegistrator[T] extends KryoRegistrator {
  override def registerClasses(kryo: Kryo) {
    kryo.register(classTag[T].runtimeClass, SpecificRecordBinarySerializer(classTag[T]))    
    kryo.register(classOf[GenericData.Array[_]], new SpecificInstanceCollectionSerializer(classOf[java.util.ArrayList[_]]))
  }
}

그러나 지금 그것은 말한다

No ClassTag available for T
안젤로 제노 베제

클래스 태그를 클래스에 대한 암시 적 인수로 사용하면 다음과 같이 사용할 수 있습니다.

class GenericKryoRegistrator[T] (implicit ct: ClassTag[T]) extends KryoRegistrator {
  override def registerClasses(kryo: Kryo) {
    kryo.register(ct.runtimeClass, SpecificRecordBinarySerializer(ct))
    kryo.register(classOf[GenericData.Array[_]], new SpecificInstanceCollectionSerializer(classOf[java.util.ArrayList[_]]))
  }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

제네릭 클래스를 확장하는 클래스를 위해 Mockito로 mock 만들기

분류에서Dev

제네릭 클래스를 기반으로 제네릭 인터페이스를 정의하는 방법

분류에서Dev

스칼라 : 함수 꼬리를 재귀 적으로 만들기

분류에서Dev

제네릭이 아닌 클래스를 제네릭 기본 클래스로 캐스팅

분류에서Dev

직렬화 문제없이 GraphFrames에 의존하는 새 스칼라 클래스 만들기

분류에서Dev

Newexpression을 기반으로 익명 형식의 제네릭 클래스 인스턴스를 반환합니다.

분류에서Dev

식별자를 기반으로 클래스 만들기

분류에서Dev

TypeScript에서 클래스 제네릭을 선택적으로 만드는 방법

분류에서Dev

제네릭 메서드로 인터페이스 만들기

분류에서Dev

제네릭 클래스를 제네릭으로 확장하는 방법

분류에서Dev

Groovy 클래스를 동적으로 만들기

분류에서Dev

Python : 클래스 메서드를 전역으로 만들기

분류에서Dev

스칼라에서 다른 데이터 유형을 제네릭으로 래핑

분류에서Dev

클래스 서명에서 스칼라 제네릭 이해

분류에서Dev

제네릭 클래스를 메서드 입력으로 사용

분류에서Dev

이 JSON을 클래스로 만들기

분류에서Dev

LINQ로 ObservableCollection 클래스 만들기

분류에서Dev

클래스로 요소 만들기

분류에서Dev

제한된 함수를 타입 클래스 인스턴스로 만들기

분류에서Dev

Java List 구현 클래스를 제공하는 setter 만들기

분류에서Dev

Swift 열거 형을 제네릭으로 만들 수 있으므로 해당 케이스를 사용하여 제네릭 클래스의 유형을 추론 할 수 있습니까?

분류에서Dev

javassist로 클래스를 만들고 사용 가능하게 만들기

분류에서Dev

스칼라 태그로 재사용 가능한 구성 요소 만들기

분류에서Dev

클래스 생성자를 비공개로 만들기

분류에서Dev

스칼라. 기능으로 설정

분류에서Dev

제네릭 유형 인수로 유형 'x'를 사용하여 제네릭 클래스를 구현하는 클래스 찾기

분류에서Dev

기존 인스턴스를 기반으로 클래스의 새 인스턴스 만들기

분류에서Dev

구체적인 클래스를 스칼라의 제네릭 메서드 인스턴스화

분류에서Dev

다른 클래스로 클래스 만들기

Related 관련 기사

  1. 1

    제네릭 클래스를 확장하는 클래스를 위해 Mockito로 mock 만들기

  2. 2

    제네릭 클래스를 기반으로 제네릭 인터페이스를 정의하는 방법

  3. 3

    스칼라 : 함수 꼬리를 재귀 적으로 만들기

  4. 4

    제네릭이 아닌 클래스를 제네릭 기본 클래스로 캐스팅

  5. 5

    직렬화 문제없이 GraphFrames에 의존하는 새 스칼라 클래스 만들기

  6. 6

    Newexpression을 기반으로 익명 형식의 제네릭 클래스 인스턴스를 반환합니다.

  7. 7

    식별자를 기반으로 클래스 만들기

  8. 8

    TypeScript에서 클래스 제네릭을 선택적으로 만드는 방법

  9. 9

    제네릭 메서드로 인터페이스 만들기

  10. 10

    제네릭 클래스를 제네릭으로 확장하는 방법

  11. 11

    Groovy 클래스를 동적으로 만들기

  12. 12

    Python : 클래스 메서드를 전역으로 만들기

  13. 13

    스칼라에서 다른 데이터 유형을 제네릭으로 래핑

  14. 14

    클래스 서명에서 스칼라 제네릭 이해

  15. 15

    제네릭 클래스를 메서드 입력으로 사용

  16. 16

    이 JSON을 클래스로 만들기

  17. 17

    LINQ로 ObservableCollection 클래스 만들기

  18. 18

    클래스로 요소 만들기

  19. 19

    제한된 함수를 타입 클래스 인스턴스로 만들기

  20. 20

    Java List 구현 클래스를 제공하는 setter 만들기

  21. 21

    Swift 열거 형을 제네릭으로 만들 수 있으므로 해당 케이스를 사용하여 제네릭 클래스의 유형을 추론 할 수 있습니까?

  22. 22

    javassist로 클래스를 만들고 사용 가능하게 만들기

  23. 23

    스칼라 태그로 재사용 가능한 구성 요소 만들기

  24. 24

    클래스 생성자를 비공개로 만들기

  25. 25

    스칼라. 기능으로 설정

  26. 26

    제네릭 유형 인수로 유형 'x'를 사용하여 제네릭 클래스를 구현하는 클래스 찾기

  27. 27

    기존 인스턴스를 기반으로 클래스의 새 인스턴스 만들기

  28. 28

    구체적인 클래스를 스칼라의 제네릭 메서드 인스턴스화

  29. 29

    다른 클래스로 클래스 만들기

뜨겁다태그

보관