Skip to content

Instantly share code, notes, and snippets.

View GabrielBrasileiro's full-sized avatar

Gabriel Brasileiro GabrielBrasileiro

View GitHub Profile
@GabrielBrasileiro
GabrielBrasileiro / ComponentCallbacksExtensions.kt
Last active October 14, 2022 02:57
Koin extensions to solve type erasure of generic mappers
/**
* This will recover and inject your interface in your fragments or activities
*/
inline fun <reified I, reified O> ComponentCallbacks.injectMapper(): Lazy<Mapper<I, O>> {
return inject(named(identifier<I, O>()))
}
@GabrielBrasileiro
GabrielBrasileiro / SampleActivity.kt
Created June 3, 2020 14:34
Get the ViewModel instance with a simple way
class SampleActivity : AppCompatActivity(R.layout.activity_sample) {
private val viewModel by getViewModel { SampleViewModel(SingleLiveEvent()) }
...
}
@GabrielBrasileiro
GabrielBrasileiro / HighOrderFunctionInline.kt
Last active June 21, 2021 20:12
HighOrderFunctionInline.kt
fun main() {
val descricao = "Inline te dando poderes mágicos"
executarOperacao {
print(descricao)
}
}
fun executarOperacao(operacaoDois: () -> Unit) {
operacaoUm()
operacaoDois()
@GabrielBrasileiro
GabrielBrasileiro / HighOrderFunctionInline.java
Last active June 22, 2021 00:24
HighOrderFunctionInline.java
public static final void main() {
final String descricao = "Inline te dando poderes mágicos";
executarOperacao(new Function() {
@Override
public void invoke() {
System.out.print(descricao);
}
}
}
@GabrielBrasileiro
GabrielBrasileiro / HighOrderFunctionNoinline.kt
Last active June 21, 2021 20:09
HighOrderFunctionNoinline.kt
fun main() {
val descricao = "Inline te dando poderes mágicos"
val descricaoEmEscopoPrincipal = "Inline no escopo principal"
executarOperacao({
print(descricao)
return // Retorno permitido
}, {
print(descricaoEmEscopoPrincipal)
return // Retorno não permitido
@GabrielBrasileiro
GabrielBrasileiro / HighOrderFunctionCrossinline.kt
Last active June 21, 2021 20:07
HighOrderFunctionCrossinline.kt
fun main() {
val descricao = "Inline te dando poderes mágicos"
executarOperacao {
print(descricao)
return // Retorno não permitido
}
}
inline fun executarOperacao(crossinline operacaoDois: () -> Unit) {
operacaoUm {
@GabrielBrasileiro
GabrielBrasileiro / Reified.kt
Last active June 19, 2021 05:45
Reified.kt
fun main() {
println(filtrarString(String::class.java))
println(adquirirMetodos(String::class.java))
}
fun <T : Any> adquirirMetodos(clazz: Class<T>): List<String> {
return clazz::class.java.methods.map { it.toString() }
}
fun <T : Any> filtrarString(clazz: Class<T>): T? {
@GabrielBrasileiro
GabrielBrasileiro / Reified.kt
Last active June 19, 2021 05:41
Reified.kt
fun main() {
println(filtrarString<String>())
println(adquirirMetodos<String>())
}
inline fun <reified T : Any> adquirirMetodos(): List<String> {
return T::class.java.methods.map { it.toString() }
}
@GabrielBrasileiro
GabrielBrasileiro / ReifiedBytecode.java
Last active June 23, 2021 03:36
ReifiedBytecode.java
public static final void main() {
// Função de adquirir métodos
Method[] methods = String.class.getMethods();
// Validação da String na lista
if (element instanceof String) {
// Atribuições
}
/**
inline fun executarOperacao(crossinline operacaoDois: () -> Unit) {
operacaoUm {
operacaoDois()
}
}
@PublishedApi
internal fun operacaoUm(bloco: () -> Unit) {
bloco()
}