一、基于Gradle可以构建很多项目,下面以Kotlin项目为例
package com.reflections
import sun.management.Agent
/**
* @author:wangdong
* @description:反射
*/
/**定义一个person类*/
class Person(val name:String,val age: Int) //默认是没有无参构造的
class DefaultConstructor()
fun main(args: Array<String>) {
val clazz = Person::class.java
val person = Person("wangdong",23)
val clazz2 = person.javaClass
val clazz3 = person::class.java
val defaultConstructor = DefaultConstructor::class.java.newInstance()
val person2 = clazz2.newInstance()
}
二、在运行这个main方法的时候,会报异常
原因是Person类默认情况下是没有无参构造的
Exception in thread "main" java.lang.InstantiationException: com.reflections.Person
at java.lang.Class.newInstance(Class.java:427)
at com.reflections.JavaReflectionsKt.main(JavaReflections.kt:28)
Caused by: java.lang.NoSuchMethodException: com.reflections.Person.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
... 1 more
三、在Gradle项目中引入插件并定义注解,以kotlin-noarg插件为例
改写build.gradle文件
buildscript {
ext.kotlin_version = '1.2.30'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
}
}
group 'net.kotlinreflects.com'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'kotlin-noarg'
noArg{
annotations "com.reflections.Noarg"
}
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
testCompile group: 'junit', name: 'junit', version: '4.12'
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
四、根据build.gradle类中的路径,写一个注解类
![这里写图片描述]()
package com.reflections
/**
* @author:wangdong
* @description:配置一个注解
*/
annotation class Noarg
五、使用注解
将第一步中的注解开启
@Noarg
class Person(val name:String,val age: Int)
六、运行main方法
好了,就不会报错了,就完成了