objectbox / objectbox/objectbox-java
Support Kotlin inline classes for ids
Nessuno ha ancora preso questa issue.
- Lingua principale
- Java
- Stelle
- 4.6k
- Fork
- 311
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Inline classes are a good way to add compile time type safety to database queries. They would prevent error caused by querying a box with the wrong id type.
@Entity
data class EntityA(
val str: String,
val id: EntityAId
)
inline class EntityAId(val value: Long)
@Entity
data class EntityB(
val str: String,
val id: EntityBId
)
inline class EntityBId(val value: Long)
val unsafeId: Long = getSomeId() //returns an id meant for EntityA
boxStore.boxFor<EntityB>()[unsafeId] //Runtime error
val safeId: EntityAId = getSomeId()
boxStore.boxFor<EntityB>()[safeId] //Compile time error
And the unsafe call only crashes if you're lucky, other times it might just seem like the database is returning garbage data, since you queried it with the wrong ids.
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Parti dagli esempi Kotlin che usano inline classes come EntityAId e EntityBId, quindi segui la chiamata boxStore.boxFor()[id]. Il lavoro è completato quando gli ID delle inline classes mantengono la separazione a compile-time tra i tipi di ID delle entità e rifiutano in fase di compilazione un ID del tipo sbagliato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- kotlin
- Ambito
- databases
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 30/100