jeggy
03/05/2021, 10:47 AMfun interface Ordering {
fun String.getOrdering(): List<String>
}
enum class CustomValueCriteriaOrder : Ordering {
ALPHABETICALLY {
override fun String.getOrdering(): List<String> {
return emptyList()
}
}
}
I could have
fun interface Ordering {
fun String.getOrdering(): List<String>
}
enum class CustomValueCriteriaOrder : Ordering {
ALPHABETICALLY { emptyList() }
}
Dominaezzz
03/05/2021, 10:52 AMfun interface Ordering {
fun String.getOrdering(): List<String>
}
enum class CustomValueCriteriaOrder(val ordering: Ordering) {
ALPHABETICALLY { emptyList() }
}
Should do the trick.Dominaezzz
03/05/2021, 10:53 AMfun interface Ordering {
fun String.getOrdering(): List<String>
}
enum class CustomValueCriteriaOrder(val ordering: Ordering): Ordering by ordering {
ALPHABETICALLY { emptyList() }
}
If you really want the polymorphism.jeggy
03/05/2021, 10:59 AMfun interface Ordering {
fun String.getOrdering(): String
}
enum class CustomValueCriteriaOrder: Ordering {
ALPHABETICALLY { override fun String.getOrdering() = "sorting rule" },
OTHER_RULE { override fun String.getOrdering() = "sorting rule" }
}
enum class UserOrder: Ordering {
NAME { override fun String.getOrdering() = "sorting rule" }
}
// Use cases
data class User1(val ordering: Ordering = CustomValueCriteriaOrder.ALPHABETICALLY)
data class User2(val ordering: Ordering = UserOrder.NAME)
This is basically what I want, but then I thought maybe SAM could improve on readability and allow me to remove the override fun String.getOrdering()
partDominaezzz
03/05/2021, 11:03 AMfun interface Ordering {
fun String.getOrdering(): List<String>
}
enum class CustomValueCriteriaOrder(val ordering: Ordering): Ordering by ordering {
ALPHABETICALLY({ emptyList() })
}
Dominaezzz
03/05/2021, 11:05 AMfun interface Ordering {
fun String.getOrdering(): List<String>
}
object CustomValueCriteriaOrder {
val ALPHABETICALLY = Ordering { emptyList() }
}
jeggy
03/05/2021, 11:08 AMjeggy
03/05/2021, 11:08 AMAlex Vasilkov
03/05/2021, 11:32 AMOrdering
subclasses, you can’t use this extension if you have an instance of Ordering
, can you?jeggy
03/05/2021, 11:59 AMAlex Vasilkov
03/05/2021, 12:06 PMALPHABETICALLY
ordering enum constant, this constant internally defines QueryBuilder.getOrdering()
extension but you can’t use it from outside. So how do you plan to call getOrdering()
then?jeggy
03/05/2021, 12:10 PMList<Ordering>
on my top level criteria interface. And have a single repository that does all SQL Queries and sortings by just calling this function with it's QueryBuilder.jeggy
03/05/2021, 4:52 PM