1 package org.djutils.primitives;
2
3
4
5
6
7
8
9
10
11
12
13
14 public final class Primitive
15 {
16
17
18
19 private Primitive()
20 {
21 super();
22
23 }
24
25
26
27
28
29
30
31 public static Object[] cast(final Class<?>[] classes, final Object[] values)
32 {
33 for (int i = 0; i < classes.length; i++)
34 {
35 values[i] = Primitive.cast(classes[i], values[i]);
36 }
37 return values;
38 }
39
40
41
42
43
44
45
46 public static Object cast(final Class<?> clazz, final Object object)
47 {
48 if (clazz.isInstance(object) || !clazz.isPrimitive() || (clazz.equals(Primitive.getPrimitive(object.getClass()))))
49 {
50 return object;
51 }
52
53
54 if (clazz.equals(boolean.class))
55 {
56 return Primitive.toBoolean(object);
57 }
58
59
60 if (clazz.equals(char.class))
61 {
62 return Primitive.toCharacter(object);
63 }
64
65
66 if (clazz.equals(byte.class))
67 {
68 return Primitive.toByte(object);
69 }
70
71
72 if (clazz.equals(double.class))
73 {
74 return Primitive.toDouble(object);
75 }
76
77
78 if (clazz.equals(float.class))
79 {
80 return Primitive.toFloat(object);
81 }
82
83
84 if (clazz.equals(long.class))
85 {
86 return Primitive.toLong(object);
87 }
88
89
90 if (clazz.equals(int.class))
91 {
92 return Primitive.toInteger(object);
93 }
94
95
96 if (clazz.equals(short.class))
97 {
98 return Primitive.toShort(object);
99 }
100 return object;
101 }
102
103
104
105
106
107
108
109 public static Class<?> forName(final String className)
110 {
111 if (className.equals("int") || className.equals("I"))
112 {
113 return int.class;
114 }
115 if (className.equals("double") || className.equals("D"))
116 {
117 return double.class;
118 }
119 if (className.equals("byte") || className.equals("B"))
120 {
121 return byte.class;
122 }
123 if (className.equals("float") || className.equals("F"))
124 {
125 return float.class;
126 }
127 if (className.equals("long") || className.equals("J"))
128 {
129 return long.class;
130 }
131 if (className.equals("boolean") || className.equals("Z"))
132 {
133 return boolean.class;
134 }
135 if (className.equals("char") || className.equals("C"))
136 {
137 return char.class;
138 }
139 if (className.equals("short") || className.equals("S"))
140 {
141 return short.class;
142 }
143 if (className.equals("void") || className.equals("V"))
144 {
145 return void.class;
146 }
147 return null;
148 }
149
150
151
152
153
154
155 public static Class<?> getPrimitive(final Class<?> wrapperClass)
156 {
157 if (wrapperClass.equals(Integer.class))
158 {
159 return int.class;
160 }
161 if (wrapperClass.equals(Double.class))
162 {
163 return double.class;
164 }
165 if (wrapperClass.equals(Byte.class))
166 {
167 return byte.class;
168 }
169 if (wrapperClass.equals(Float.class))
170 {
171 return float.class;
172 }
173 if (wrapperClass.equals(Long.class))
174 {
175 return long.class;
176 }
177 if (wrapperClass.equals(Boolean.class))
178 {
179 return boolean.class;
180 }
181 if (wrapperClass.equals(Character.class))
182 {
183 return char.class;
184 }
185 if (wrapperClass.equals(Short.class))
186 {
187 return short.class;
188 }
189 return null;
190 }
191
192
193
194
195
196
197 public static Class<?> getWrapper(final Class<?> primitiveClass)
198 {
199 if (primitiveClass.equals(int.class))
200 {
201 return Integer.class;
202 }
203 if (primitiveClass.equals(double.class))
204 {
205 return Double.class;
206 }
207 if (primitiveClass.equals(byte.class))
208 {
209 return Byte.class;
210 }
211 if (primitiveClass.equals(float.class))
212 {
213 return Float.class;
214 }
215 if (primitiveClass.equals(long.class))
216 {
217 return Long.class;
218 }
219 if (primitiveClass.equals(boolean.class))
220 {
221 return Boolean.class;
222 }
223 if (primitiveClass.equals(char.class))
224 {
225 return Character.class;
226 }
227 if (primitiveClass.equals(short.class))
228 {
229 return Short.class;
230 }
231 throw new IllegalArgumentException(primitiveClass + " != primitive");
232 }
233
234
235
236
237
238
239 public static Boolean toBoolean(final Object object)
240 {
241 if (object instanceof Number)
242 {
243 int value = ((Number) object).intValue();
244 if (value == 1)
245 {
246 return Boolean.TRUE;
247 }
248 if (value == 0)
249 {
250 return Boolean.FALSE;
251 }
252 throw new IllegalArgumentException("object.intValue !=0 && !=1");
253 }
254 return (Boolean) object;
255 }
256
257
258
259
260
261
262 public static Byte toByte(final Object object)
263 {
264 if (object instanceof Number)
265 {
266 return new Byte(((Number) object).byteValue());
267 }
268 return (Byte) object;
269 }
270
271
272
273
274
275
276 public static Character toCharacter(final Object object)
277 {
278 if (object instanceof Number)
279 {
280 return new Character((char) ((Number) object).byteValue());
281 }
282 return (Character) object;
283 }
284
285
286
287
288
289
290 public static Double toDouble(final Object object)
291 {
292 return new Double(((Number) object).doubleValue());
293 }
294
295
296
297
298
299
300 public static Float toFloat(final Object object)
301 {
302 return new Float(((Number) object).floatValue());
303 }
304
305
306
307
308
309
310 public static Long toLong(final Object object)
311 {
312 return new Long(((Number) object).longValue());
313 }
314
315
316
317
318
319
320 public static Short toShort(final Object object)
321 {
322 return new Short(((Number) object).shortValue());
323 }
324
325
326
327
328
329
330 public static Integer toInteger(final Object object)
331 {
332 if (object instanceof Character)
333 {
334 return new Integer(((Character) object).charValue());
335 }
336 if (object instanceof Boolean)
337 {
338 if (((Boolean) object).booleanValue())
339 {
340 return new Integer(1);
341 }
342 return new Integer(0);
343 }
344 return new Integer(((Number) object).intValue());
345 }
346 }