/
FieldDesc.java
154 lines (135 loc) · 4.49 KB
/
FieldDesc.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*
* Copyright 2012-2024 CodeLibs Project and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.codelibs.core.beans;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Map;
/**
* フィールドを扱うためのインターフェースです。
*
* @author koichik
*/
public interface FieldDesc {
/**
* このフィールドを所有するクラスの{@link BeanDesc}を返します。
*
* @return {@link BeanDesc}
*/
BeanDesc getBeanDesc();
/**
* フィールドを返します。
*
* @return フィールド
*/
Field getField();
/**
* フィールド名を返します。
*
* @return フィールド名
*/
String getFieldName();
/**
* フィールドの型を返します。
*
* @param <T>
* フィールドの型
* @return フィールドの型
*/
<T> Class<T> getFieldType();
/**
* {@literal public}フィールドの場合は{@literal true}を返します。
*
* @return {@literal public}フィールドの場合は{@literal true}
*/
boolean isPublic();
/**
* {@literal static}フィールドの場合は{@literal true}を返します。
*
* @return {@literal static}フィールドの場合は{@literal true}
*/
boolean isStatic();
/**
* {@literal final}フィールドの場合は{@literal true}を返します。
*
* @return {@literal final}フィールドの場合は{@literal true}
*/
boolean isFinal();
/**
* このフィールドがパラメタ化された型の場合は{@literal true}を返します。
*
* @return このフィールドがパラメタ化された型の場合は{@literal true}
*/
boolean isParameterized();
/**
* フィールドの型を表現する{@link ParameterizedClassDesc}を返します。
*
* @return フィールドの型を表現する{@link ParameterizedClassDesc}
*/
ParameterizedClassDesc getParameterizedClassDesc();
/**
* このフィールドがパラメタ化された{@link Collection}の場合、その要素型を返します。
*
* @return このフィールドがパラメタ化された{@link Collection}の場合はその要素型、そうでない場合は
* {@literal null}
*/
Class<?> getElementClassOfCollection();
/**
* このフィールドがパラメタ化された{@link Map}の場合、そのキー型を返します。
*
* @return このフィールドがパラメタ化された{@link Map}の場合はそのキー型、そうでない場合は{@literal null}
*/
Class<?> getKeyClassOfMap();
/**
* このフィールドがパラメタ化された{@link Map}の場合、その値型を返します。
*
* @return このフィールドがパラメタ化された{@link Map}の場合はその値型、そうでない場合は{@literal null}
*/
Class<?> getValueClassOfMap();
/**
* {@link Field}の値を返します。
*
* @param <T>
* フィールドの型
* @param target
* 対象のオブジェクト。{@literal null}であってはいけません
* @return {@link Field}の値
*/
<T> T getFieldValue(Object target);
/**
* staticな{@link Field}の値を返します。
*
* @param <T>
* フィールドの型
* @return {@link Field}の値
*/
<T> T getStaticFieldValue();
/**
* {@link Field}の値を設定します。
*
* @param target
* 対象のオブジェクト。{@literal null}であってはいけません
* @param value
* {@link Field}の値
*/
void setFieldValue(Object target, Object value);
/**
* staticな{@link Field}の値を設定します。
*
* @param value
* {@link Field}の値
*/
void setStaticFieldValue(Object value);
}