GithubHelp home page GithubHelp logo

hanfengzqh / kotlin-reflect-tools-for-jvm Goto Github PK

View Code? Open in Web Editor NEW

This project forked from wuseal/kotlin-reflect-tools-for-jvm

0.0 0.0 0.0 94 KB

Kotlin reflect tools for JVM

License: Apache License 2.0

Kotlin 100.00%

kotlin-reflect-tools-for-jvm's Introduction

Bintray GitHub stars license

Kotlin-Reflect-Tools-For-JVM

Related Project: Kotlin-Reflect-Tools-For-Android

OverView

This is a tool library for Kotlin to use java reflect APIs in Kotlin simply method.It can modify or read the top level private visible property value in Kotlin way.

Usage

  • Add jcenter repository in your moduel build gradle:

     repositories {
          jcenter()
     }
  • Apply library in dependency config:

       compile 'wu.seal:kotlin-reflect-tools-for-jvm:1.1.2'

APIs

Method Describe
Any.getPropertyValue(propertyName: String): Any? get object property value by name
Any.changePropertyValue(propertyName: String, newValue: Any?) change object property value by name
Any.changePropertyValueIgnoreItsType(propertyName: String, newValue: Any?) change object property value by name
Any.changePropertyValueByPropertyReference(kProperty: KProperty, newValue: Any?) change object property value by property reference
Any.invokeMethod(methodName: String, vararg args: Any?): Any? invoke a method through object by method name
KProperty.changeValue(thisObj: Any, newValue: Any?) change current this property valuev
KProperty.packageLevelGetPropertyValueByName(otherPropertyName: String): Any? get other package level property value by other package level property name which is in the same kotlin file
KFunction.packageLevelGetPropertyValueByName(otherPropertyName: String): Any? get other package level property value by other package level property name which is in the same kotlin file
KProperty.packageLevelChangePropertyValue(newValue: Any?) change package level property value
KProperty.packageLevelChangeOtherPropertyValueByName(otherPropertyName: String, newValue: Any?) change other package level property value by other package level property name which is in the same kotlin file
KFunction.packageLevelChangeOtherPropertyValueByName(otherPropertyName: String, newValue: Any?) change other package level property value by other package level property name which is in the same kotlin file
KProperty.packageLevelInvokeMethodByName(methodName: String, vararg args: Any?): Any? invoke package level method by name which is in the same kotlin file
KFunction.packageLevelInvokeMethodByName(methodName: String, vararg args: Any?): Any? invoke package level method by name which is in the same kotlin file

All method don't care what the property or method visibility it is

Demo

For example a Kotlin file like this:

val topName = "topSeal"
val topNameWu = "topSealWu"
private val topAge = 666

private fun gotIt() = true

fun funDoubleAge(age: Int): Int {
    return age * 2
}

class TestDemo {
    private val name = "seal"
    val age = 28

    private fun isMan(): Boolean {
        return true
    }
}

Then we could do these :

   
    @Test
    fun getPropertyValue() {
        val demo = TestDemo()
        val nameValue = demo.getPropertyValue("name")
        nameValue.should.be.equal("seal")
    }

    @Test
    fun changePropertyValue() {
        val demo = TestDemo()
        val originValue = demo.age
        demo.changePropertyValue("age", 100)
        val nowValue = demo.age
        originValue.should.not.equal(nowValue)
        nowValue.should.be.equal(100)
    }
    
    @Test
    fun changeValue() {
        val demo = TestDemo()
        demo::age.changeValue(demo, 100)
        demo.age.should.be.equal(100)
    }

    @Test
    fun packageLevelGetPropertyValueByName() {
        val topAge = ::topNameWu.packageLevelGetPropertyValueByName("topAge")
        topAge.should.be.equal(666)
    }

    @Test
    fun packageLevelInvokeMethodByName() {
        val methodResult = ::topName.packageLevelInvokeMethodByName("gotIt") as Boolean
        methodResult.should.be.`true`
    }

To see more usage cases ,you can have a look at the test case in project.

Others

  • Welcome to raise any issue.
  • Welcome to push a pull request

Find me useful ? ❤️

  • Support me by clicking the ⭐ button on the upper right of this page. ✌️

kotlin-reflect-tools-for-jvm's People

Contributors

wuseal avatar youngxhui avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.