Faire une fonction pour une classe et ses sous classes en Kotlin
Salut ! Je suis en train de me faire une petite lib mathématique en kotlin mais j'ai un problème:
J'ai définit une classe Matrice qui est en gros une liste a deux dimentions.
Je fait en suite une classe MatriceLigne pour une matrice a une seule ligne et une MatriceColone pour une matrice a une colonne.
Je ferai en suite des classes type Vec2 qui seront des MatriceColone de longueur 2 par exemple
Le problème est le suivant : comment définir une fonction qui ne dépend pas du sous-type, mais qui doit retourner ce sous type ?
Par exemple
Je voudrais pourvoir utiliser cet opérateur avec par exemple un Vec2, mais qu'il me retourne un Vec2, pas une matrice. Comme je me sert du constructeur je ne peut pas juste utiliser un type générique…
Btw ma classe Matrix si ca peut aider :
2 Replies
Tu peux peut-être faire un builder a la place d'utiliser le constructeur directement.
Ouais mais relou... En plus avec un builder je ferai comment ? MatrixBuilder.fromList(xxx).toVec2() ? Je préférerais ne pas avoir à faire une implémentation par descendant
Finalement j'ai transformé rows en var et je modifie la matrice existante, meme si c'est pas ouf...
C'etait vraiment nul d'avoir la fonction times qui modifie l'objet de base, du coup j'ai fait une fonction copy que j'overide dans chaque enfant, c'est le plus simple
Sauf que je suis obligé de garder mes matrices mutables (pour modifier la copie) et j'ai kotlin qui rale a cause du cast forcé :
J'ai réussit a rendre mes matrices immuable, en remplacant copy par create qui expose le constructeur
Par contre j'ai toujours des casts que kotlin aime pas
Bon bah bard m'a donné la solution, il suffisait d'utiliser reified (j'avais complètement oublié l'existence de ce truc)