Skip to content

Commit 5ed933d

Browse files
committed
Refactor optionals
1 parent 48064c7 commit 5ed933d

File tree

1 file changed

+9
-20
lines changed

1 file changed

+9
-20
lines changed

spring-context/src/main/java/org/springframework/cache/interceptor/CacheResultWrapperManager.java

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import org.springframework.util.Assert;
1919
import org.springframework.util.ClassUtils;
20+
import org.springframework.util.ObjectUtils;
2021
import rx.Observable;
2122
import rx.functions.Action0;
2223
import rx.functions.Action1;
@@ -34,21 +35,12 @@ public CacheResultWrapperManager() {
3435
unwrapperByClass = new HashMap<Class<?>, CacheResultWrapper>();
3536

3637
List<CacheResultWrapper> unwrapperList = new ArrayList<CacheResultWrapper>();
37-
try {
38-
ClassUtils.forName("java.util.Optional", CacheAspectSupport.class.getClassLoader());
39-
unwrapperList.add(new OptionalUnWrapper());
40-
}
41-
catch (ClassNotFoundException ex) {
42-
// Java 8 not available - Optional references simply not supported then.
43-
}
4438

45-
try {
46-
ClassUtils.forName("rx.Observable", CacheAspectSupport.class.getClassLoader());
39+
unwrapperList.add(new OptionalUnWrapper());
40+
41+
if(ClassUtils.isPresent("rx.Observable", CacheAspectSupport.class.getClassLoader())) {
4742
unwrapperList.add(new ObservableWrapper());
4843
}
49-
catch (ClassNotFoundException ex) {
50-
// RxJava not available
51-
}
5244

5345
for(CacheResultWrapper unwrapper: unwrapperList) {
5446
unwrapperByClass.put(unwrapper.getWrapClass(), unwrapper);
@@ -102,14 +94,11 @@ private class OptionalUnWrapper implements CacheResultWrapper {
10294
@Override
10395
public Object unwrap(Object optionalObject, AsyncWrapResult asyncResult) {
10496
Optional<?> optional = (Optional<?>) optionalObject;
105-
if (!optional.isPresent()) {
106-
asyncResult.complete(null);
107-
}
108-
else {
109-
Object result = optional.get();
110-
Assert.isTrue(!(result instanceof Optional), "Multi-level Optional usage not supported");
111-
asyncResult.complete(result);
112-
}
97+
98+
Object value = ObjectUtils.unwrapOptional(optional);
99+
100+
asyncResult.complete(value);
101+
113102
return optionalObject;
114103
}
115104

0 commit comments

Comments
 (0)