Skip to content

Commit 0e889cb

Browse files
committed
添加注释
1 parent 071d7f6 commit 0e889cb

File tree

11 files changed

+300
-85
lines changed

11 files changed

+300
-85
lines changed

.idea/dictionaries/xiaoqi.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build.gradle

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ buildscript {
2020
// NOTE: Do not place your application dependencies here; they belong
2121
// in the individual module build.gradle files
2222
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
23-
// classpath 'com.noober.plugin:savehelper-plugin:3.0.7'
24-
classpath 'com.noober.save:plugin:3.0.7'
25-
// classpath 'com.noober.save:plugin:3.0.1-beta'
23+
classpath 'com.noober.plugin:savehelper-plugin:3.0.7'
24+
// classpath 'com.noober.save:plugin:3.0.7'
2625
classpath 'org.aspectj:aspectjtools:1.8.13'
2726
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.2'
2827
}

javapoet常用api.md

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
2+
## JavaPoet常用类
3+
类名 | 作用
4+
---|---
5+
TypeSpec | 用于生成类、接口、枚举对象的类
6+
MethodSpec | 用于生成方法对象的类
7+
ParameterSpec | 用于生成参数对象的类
8+
AnnotationSpec | 用于生成注解对象的类
9+
FieldSpec | 用于配置生成成员变量的类
10+
ClassName | 通过包名和类名生成的对象,在JavaPoet中相当于为其指定Class
11+
ParameterizedTypeName | 通过MainClass和IncludeClass生成包含泛型的Class
12+
JavaFile | 控制生成的Java文件的输出的类
13+
14+
## JavaPoet的常用方法
15+
### 设置修饰关键字
16+
addModifiers(Modifier... modifiers)
17+
18+
Modifier是一个枚举对象,枚举值为修饰关键字Public、Protected、Private、Static、Final等等。
19+
所有在JavaPoet创建的对象都必须设置修饰符(包括方法、类、接口、枚举、参数、变量)。
20+
### 设置注解对象
21+
addAnnotation(AnnotationSpec annotationSpec)
22+
addAnnotation(ClassName annotation)
23+
addAnnotation(Class<?> annotation)
24+
25+
该方法即为类或方法或参数设置注解。
26+
### 设置注释
27+
addJavadoc(CodeBlock block)
28+
addJavadoc(String format, Object... args)
29+
30+
在编写类、方法、成员变量时,可以通过addJavadoc来设置注释,可以直接传入String对象,或者传入CodeBlock(代码块)。
31+
32+
### JavaPoet生成类、接口、枚举对象
33+
34+
在JavaPoet中生成类、接口、枚举,必须得通过TypeSpec生成,而classBuilder、interfaceBuilder、enumBuilder便是创建其关键的方法:
35+
36+
创建类:
37+
TypeSpec.classBuilder("类名“)
38+
TypeSpec.classBuilder(ClassName className)
39+
40+
创建接口:
41+
TypeSpec.interfaceBuilder("接口名称")
42+
TypeSpec.interfaceBuilder(ClassName className)
43+
44+
创建枚举:
45+
TypeSpec.enumBuilder("枚举名称")
46+
TypeSpec.enumBuilder(ClassName className)
47+
48+
### 继承、实现接口
49+
50+
继承类:
51+
.superclass(ClassName className)
52+
53+
实现接口
54+
.addSuperinterface(ClassName className)
55+
56+
### 继承存在泛型的父类
57+
ParameterizedTypeName get(ClassName rawType, TypeName... typeArguments)
58+
59+
### 添加方法
60+
addMethod(MethodSpec methodSpec)
61+
通过配置MethodSpec对象,使用addMethod方法将其添加进TypeSpec中。
62+
63+
### 添加枚举
64+
addEnumConstan(String enumValue)
65+
通过addEnumConstan方法添加枚举值,参数为枚举值名称。
66+
67+
### 生成成员变量
68+
69+
builder(TypeName type, String name, Modifier... modifiers)
70+
71+
通过FieldSpec的build方法生成,传入TypeName(Class)、name(名称)、Modifier(修饰符),就可以生成一个基本的成员变量。通过addField增加即可。
72+
73+
### 创建对象
74+
75+
initializer(String format, Object... args)
76+
77+
例如:
78+
79+
public Activity mActivity = new Activity;
80+
实现方法:
81+
82+
ClassName activity = ClassName.get("android.app", "Activity");
83+
FieldSpec spec = FieldSpec.builder(activity, "mActivity")
84+
.addModifiers(Modifier.PUBLIC)
85+
.initializer("new $T", activity)
86+
.build();
87+
88+
### 生成方法
89+
90+
#### 构造方法
91+
92+
MethodSpec.constructorBuilder()
93+
94+
#### 普通方法
95+
96+
MethodSpec.constructorBuilder()
97+
98+
#### 方法参数
99+
100+
addParameter(ParameterSpec parameterSpec)
101+
102+
#### 返回值
103+
104+
returns(TypeName returnType)
105+
106+
#### 抛出异常
107+
108+
.addException(TypeName name)
109+
110+
#### 方法内容
111+
112+
addCode()
113+
addStatement()
114+
115+
addStatement()方法时,你只需要专注于该段代码的内容,至于结尾的分号和换行它都会帮你做好。
116+
而addCode()添加的方法体内容就是一段无格式的代码片,需要开发者自己添加其格式。
117+
118+
#### 生成方法参数
119+
120+
addParameter(ParameterSpec parameterSpec)
121+
122+
##### ParameterSpec
123+
124+
ParameterSpec.builder(TypeName type, String name, Modifier... modifiers)
125+
126+
127+
### 常用通配符
128+
129+
#### $T
130+
$T 在JavaPoet代指的是TypeName,该模板主要将Class抽象出来,用传入的TypeName指向的Class来代替。
131+
132+
例如:
133+
134+
Bundle bundle = new Bundle();
135+
136+
ClassName bundle = ClassName.get("android.os", "Bundle");
137+
addStatement("$T bundle = new $T()",bundle)
138+
139+
#### $N
140+
141+
$N在JavaPoet中代指的是一个名称,例如调用的方法名称,变量名称,这一类存在意思的名称。
142+
143+
例如:
144+
145+
data.toString();
146+
147+
addStatement("data.$N()",toString)
148+
149+
#### $S
150+
151+
$S在JavaPoet中就和String.format中%s一样,字符串的模板,将指定的字符串替换到$S的地方,需要注意的是替换后的内容,默认自带了双引号,如果不需要双引号包裹,需要使用$L.
152+
153+
例如:
154+
155+
return name
156+
157+
.addStatement("return $S", “name”)
158+
159+
### 生成注解
160+
161+
#### 初始化AnnotationSpec
162+
163+
AnnotationSpec.builder(ClassName type)
164+
165+
#### 设置属性
166+
167+
addMember(String name, String format, Object... args)
168+
169+
使用addMember可以设置注解的属性值,name对应的就是属性名称,format的内容即属性体,同样方法体的格式化在这里也是适用的。
170+
171+
### 生成代码
172+
173+
JavaFile.builder(String packageName, TypeSpec typeSpec)
174+
175+
JavaFile通过向build方法传入PackageName(Java文件的包名)、TypeSpec(生成的内容)生成。
176+
177+
#### 打印结果
178+
179+
javaFile.writeTo(System.out)
180+
181+
生成的内容会输出到控制台中
182+
183+
#### 生成文件
184+
185+
javaFile.writeTo(File file)
186+
187+
生成的内容会以java文件的方式,存放到你传入File文件的位置
188+

sample/build.gradle

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,16 @@ android {
3030

3131
dependencies {
3232
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
33-
compile fileTree(include: ['*.jar'], dir: 'libs')
34-
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
33+
implementation fileTree(include: ['*.jar'], dir: 'libs')
34+
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
3535
exclude group: 'com.android.support', module: 'support-annotations'
3636
})
3737
implementation 'com.android.support:appcompat-v7:26.0.1'
38-
// testImplementation 'junit:junit:4.12'
39-
// compile 'org.aspectj:aspectjrt:1.8.13'
40-
// implementation project(':savehelper')
41-
// implementation project(':savehelper-api')
42-
// kapt project(':savehelper-processor')
38+
testImplementation 'junit:junit:4.12'
39+
implementation 'org.aspectj:aspectjrt:1.8.13'
40+
implementation project(':savehelper')
41+
implementation project(':savehelper-api')
42+
kapt project(':savehelper-processor')
4343
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
4444
}
4545

sample/src/main/java/com/recover/autosavesample/BaseActivity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.recover.autosavesample;
22

33
import android.os.Bundle;
4+
import android.os.PersistableBundle;
45
import android.support.v7.app.AppCompatActivity;
56

67
import com.noober.savehelper.SaveHelper;
@@ -22,4 +23,9 @@ public class BaseActivity extends AppCompatActivity {
2223
protected void onSaveInstanceState(Bundle outState) {
2324
super.onSaveInstanceState(outState);
2425
}
26+
27+
@Override
28+
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
29+
super.onSaveInstanceState(outState, outPersistentState);
30+
}
2531
}

sample/src/main/java/com/recover/autosavesample/KotlinActivity.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,13 @@ class KotlinActivity : AppCompatActivity() {
1818
override fun onCreate(savedInstanceState: Bundle?) {
1919
super.onCreate(savedInstanceState)
2020
setContentView(R.layout.activity_kotlin)
21-
SaveHelper.recover(this, savedInstanceState)
2221
Log.e("KotlinActivity", a.toString())
23-
2422
}
2523

2624

2725
override fun onSaveInstanceState(outState: Bundle?) {
2826
Log.e("KotlinActivity", "onSaveInstanceState")
2927
a = 2
30-
SaveHelper.save(this, outState)
3128
super.onSaveInstanceState(outState)
3229
}
3330
}

0 commit comments

Comments
 (0)