|
12 | 12 | import java.time.ZoneId; |
13 | 13 | import java.util.Arrays; |
14 | 14 |
|
15 | | -@SuppressWarnings("rawtypes") |
16 | 15 | public class TupleTransformer<T> { |
17 | 16 | private final Class<T> outputClass; |
18 | 17 | private Constructor<T> outputClassConstructor = null; |
19 | | - private Class[] outputClassFieldClasses = null; |
| 18 | + private Class<?>[] outputClassFieldClasses = null; |
20 | 19 |
|
21 | 20 | private final Mode mode; |
22 | 21 |
|
@@ -60,18 +59,6 @@ public TupleTransformer(Class<T> outputClass) { |
60 | 59 | } |
61 | 60 | } |
62 | 61 |
|
63 | | - private static <T> boolean isSimpleType(Class<T> outputClass) { |
64 | | - return String.class.isAssignableFrom(outputClass) |
65 | | - || Float.class.isAssignableFrom(outputClass) |
66 | | - || Double.class.isAssignableFrom(outputClass) |
67 | | - || Short.class.isAssignableFrom(outputClass) |
68 | | - || Integer.class.isAssignableFrom(outputClass) |
69 | | - || Long.class.isAssignableFrom(outputClass) |
70 | | - || Character.class.isAssignableFrom(outputClass) |
71 | | - || Byte.class.isAssignableFrom(outputClass) |
72 | | - || Boolean.class.isAssignableFrom(outputClass); |
73 | | - } |
74 | | - |
75 | 62 | @SuppressWarnings("unchecked") |
76 | 63 | public T transform(Object[] objects) { |
77 | 64 | try { |
@@ -134,17 +121,17 @@ public T transform(Object[] objects) { |
134 | 121 | } |
135 | 122 |
|
136 | 123 | // Converter: Instant to OffsetDateTime |
137 | | - if (objects[i] instanceof Instant && outputClassFieldClasses[i].isAssignableFrom(OffsetDateTime.class)) { |
| 124 | + if (objects[i] instanceof Instant instant && outputClassFieldClasses[i].isAssignableFrom(OffsetDateTime.class)) { |
138 | 125 | objects[i] = OffsetDateTime.ofInstant( |
139 | | - (Instant) objects[i], |
| 126 | + instant, |
140 | 127 | ZoneId.systemDefault() |
141 | 128 | ); |
142 | 129 | continue; |
143 | 130 | } |
144 | 131 |
|
145 | 132 | // Converter: to Records that wrap exactly one value (CustomType) |
146 | 133 | if (CustomType.class.isAssignableFrom(outputClassFieldClasses[i])) { |
147 | | - objects[i] = toCustomType(objects[i], outputClassFieldClasses[i]); |
| 134 | + objects[i] = toCustomType(objects[i], (Class<? extends CustomType<?>>) outputClassFieldClasses[i]); |
148 | 135 | continue; |
149 | 136 | } |
150 | 137 |
|
@@ -177,7 +164,19 @@ public T transform(Object[] objects) { |
177 | 164 | } |
178 | 165 | } |
179 | 166 |
|
180 | | - private <X extends CustomType<?>> X toCustomType( |
| 167 | + private static <T> boolean isSimpleType(Class<T> outputClass) { |
| 168 | + return String.class.isAssignableFrom(outputClass) |
| 169 | + || Float.class.isAssignableFrom(outputClass) |
| 170 | + || Double.class.isAssignableFrom(outputClass) |
| 171 | + || Short.class.isAssignableFrom(outputClass) |
| 172 | + || Integer.class.isAssignableFrom(outputClass) |
| 173 | + || Long.class.isAssignableFrom(outputClass) |
| 174 | + || Character.class.isAssignableFrom(outputClass) |
| 175 | + || Byte.class.isAssignableFrom(outputClass) |
| 176 | + || Boolean.class.isAssignableFrom(outputClass); |
| 177 | + } |
| 178 | + |
| 179 | + private static <X extends CustomType<?>> X toCustomType( |
181 | 180 | Object actualValue, |
182 | 181 | Class<X> targetType |
183 | 182 | ) throws InvocationTargetException, InstantiationException, IllegalAccessException { |
|
0 commit comments