2016-10-30 7 views
1

Texture, 사실 나는 그런 Texture2d 이제데이터 및 개방형 비 호환성, 대안이 있습니까?

등 여러 클래스에 의해 확장

open class Texture

다음 한 나는 glikotlin port을하고 그리고 난 지금

을 붙어있어 꽤 속성이 있습니다

protected val storage: StorageLinear? 
protected val target: Target 
protected val format: Format 
protected val baseLayer: Int 
protected val maxLayer: Int 
protected val baseFace: Int 
protected val maxFace: Int 
protected val baseLevel: Int 
protected val maxLevel: Int 
protected val swizzles: Swizzles 

그러므로 나는 ..

한 가지 방법 호환 (이 question 참조)된다 .. 그와 함께 제공되는 equals()을 악용하기 위해 data 클래스로 그것을 가지고

하지만 불행히도 dataopen 싶습니다 나는 내 자신의 equals() 방법을 쓸 수, 그것을 해결할 수 있지만, 나는 모든 class ES가 돈 Texture을 확장하기 때문에, 자바를 통해

또 다른 방법은 코 틀린로 전환 이유는 상투적 인 코드 더러운, 가장 큰 이유는 바로이 것 정말로 추가하지 마라. (빌어 먹을 this excellent answer 참조).

그러나 아무것도 무료로 제공되지 않기 때문에이 솔루션의 큰 단점은 내가 코 틀린 커뮤니티가 매우 활성화 및 지원 외모 때문에 '클래스로 Texture2dTexture2d 텍스처의 단일 이미지를 검색 할 수있는 좋은 operator []있다 ..

을 할 수있는 가능성을 잃게 D, 난 당신이 더 나은 경우 알고 싶습니다 아이디어 ..

답변

1

가장 실용적인 해결책은 Textureequals을 생성하고 완료하는 것입니다.

데이터 클래스의 용도는 매우 좁습니다. 당신의 예제는 고전적인 data 클래스에 실제로 들어 맞지 않습니다, 그래서 당신은이 문제를 가지고 있습니다.

+0

와우, 나는이 대답을 표시 할 것으로 기대하지 않았다.) 결국, @elect , 처음부터 알았어 – voddan

+0

글쎄, 너는 기본적으로 내 임시 선택을 확인 했어. 그래서 나에게 친절한 대답 이네. – elect

1

인터페이스 및 위임 패턴 사용 :

interface Texture { 
    fun method1() 
    fun method2() 
} 

data class TextureImpl(val baseLayer: Int, val maxLayer: Int): Texture{ 
    override fun method1() { 

    } 
    override fun method2() { 

    } 
} 

data class Texture2d(val impl: TextureImpl) : Texture by impl 

data class Texture3d(val impl: TextureImpl) : Texture by impl 

당신은 일반적으로 추상적 인 것 TextureImplTexture2d 같은 구체적인 클래스를 초기화하지만 우리는 데이터 클래스 개요를 할 수 없습니다.

내가 상속을 여기에 바꿨다고 말하면 내가 틀리지 않았 으면 좋겠다.

귀하의 사례에서 의미가 있습니까?

+0

나는 그 순간에'equals()'옵션을 선택 하겠지만, 당신의 제안은 흥미 롭다. 나는 그것에 대해 생각할 것이다. +1 – elect