30
30
* @author Jennifer Hickey
31
31
* @author Christoph Strobl
32
32
* @author Mark Paluch
33
+ * @param <T> The data type of the object that holds the future result (usually of type Future).
34
+ * @param <R> The data type of the result type.
33
35
* @since 2.1
34
36
*/
35
- class JedisResult <T , S > extends FutureResult <Response <?>> {
37
+ class JedisResult <T , R > extends FutureResult <Response <?>> {
36
38
37
39
private final boolean convertPipelineAndTxResults ;
38
40
39
- < T > JedisResult (Response <T > resultHolder ) {
41
+ JedisResult (Response <T > resultHolder ) {
40
42
this (resultHolder , false , null );
41
43
}
42
44
43
- < T > JedisResult (Response <T > resultHolder , boolean convertPipelineAndTxResults , @ Nullable Converter <T , ?> converter ) {
44
- this (resultHolder , null , convertPipelineAndTxResults , converter );
45
+ JedisResult (Response <T > resultHolder , boolean convertPipelineAndTxResults , @ Nullable Converter <T , ?> converter ) {
46
+ this (resultHolder , () -> null , convertPipelineAndTxResults , converter );
45
47
}
46
48
47
- < T > JedisResult (Response <T > resultHolder , Supplier <S > defaultReturnValue , boolean convertPipelineAndTxResults ,
49
+ JedisResult (Response <T > resultHolder , Supplier <R > defaultReturnValue , boolean convertPipelineAndTxResults ,
48
50
@ Nullable Converter <T , ?> converter ) {
49
51
50
52
super (resultHolder , converter , defaultReturnValue );
@@ -58,25 +60,26 @@ <T> JedisResult(Response<T> resultHolder, Supplier<S> defaultReturnValue, boolea
58
60
*/
59
61
@ Nullable
60
62
@ Override
63
+ @ SuppressWarnings ("unchecked" )
61
64
public T get () {
62
65
return (T ) getResultHolder ().get ();
63
66
}
64
67
65
68
/*
66
69
* (non-Javadoc)
67
- * @see org.springframework.data.redis.connection.FutureResult#seeksConversion()
68
- * @return
70
+ * @see org.springframework.data.redis.connection.FutureResult#conversionRequired()
69
71
*/
70
- public boolean seeksConversion () {
71
- return convertPipelineAndTxResults && converter != null ;
72
+ public boolean conversionRequired () {
73
+ return convertPipelineAndTxResults ;
72
74
}
73
75
74
76
/**
75
77
* Jedis specific {@link FutureResult} implementation of a throw away status result.
76
78
*/
77
- static class JedisStatusResult extends JedisResult {
79
+ static class JedisStatusResult < T , R > extends JedisResult < T , R > {
78
80
79
- <T > JedisStatusResult (Response <T > resultHolder , Converter <T , ?> converter ) {
81
+ @ SuppressWarnings ("unchecked" )
82
+ JedisStatusResult (Response <T > resultHolder , Converter <T , R > converter ) {
80
83
81
84
super (resultHolder , false , converter );
82
85
setStatus (true );
@@ -87,54 +90,77 @@ <T> JedisStatusResult(Response<T> resultHolder, Converter<T, ?> converter) {
87
90
* Builder for constructing {@link JedisResult}.
88
91
*
89
92
* @param <T>
90
- * @param <S >
93
+ * @param <R >
91
94
* @since 2.1
92
95
*/
93
- static class JedisResultBuilder <T , S > {
96
+ static class JedisResultBuilder <T , R > {
94
97
95
98
private final Response <T > response ;
96
- private Converter <T , ? > converter ;
99
+ private Converter <T , R > converter ;
97
100
private boolean convertPipelineAndTxResults = false ;
98
- private Supplier <? > nullValueDefault = () -> null ;
101
+ private Supplier <R > nullValueDefault = () -> null ;
99
102
103
+ @ SuppressWarnings ("unchecked" )
100
104
JedisResultBuilder (Response <T > response ) {
101
105
102
106
this .response = response ;
103
- this .converter = (source ) -> source ;
107
+ this .converter = (source ) -> ( R ) source ;
104
108
}
105
109
106
- static <T > JedisResultBuilder <T , ?> forResponse (Response <T > response ) {
110
+ /**
111
+ * Create a new {@link JedisResultBuilder} given {@link Response}.
112
+ *
113
+ * @param response must not be {@literal null}.
114
+ * @param <T> native response type.
115
+ * @param <R> resulting response type.
116
+ * @return the new {@link JedisResultBuilder}.
117
+ */
118
+ static <T , R > JedisResultBuilder <T , R > forResponse (Response <T > response ) {
107
119
return new JedisResultBuilder <>(response );
108
120
}
109
121
110
- <S > JedisResultBuilder <T , S > mappedWith (Converter <T , S > converter ) {
122
+ /**
123
+ * Configure a {@link Converter} to convert between {@code T} and {@code R} types.
124
+ *
125
+ * @param converter must not be {@literal null}.
126
+ * @return {@code this} builder.
127
+ */
128
+ JedisResultBuilder <T , R > mappedWith (Converter <T , R > converter ) {
111
129
112
130
this .converter = converter ;
113
- return (JedisResultBuilder <T , S >) this ;
114
- }
115
-
116
- <S > JedisResultBuilder <T , S > defaultNullTo (S value ) {
117
- return (defaultNullTo (() -> value ));
131
+ return this ;
118
132
}
119
133
120
- <S > JedisResultBuilder <T , S > defaultNullTo (Supplier <S > value ) {
134
+ /**
135
+ * Configure a {@link Supplier} to map {@literal null} responses to a different value.
136
+ *
137
+ * @param supplier must not be {@literal null}.
138
+ * @return {@code this} builder.
139
+ */
140
+ JedisResultBuilder <T , R > mapNullTo (Supplier <R > supplier ) {
121
141
122
- this .nullValueDefault = value ;
123
- return ( JedisResultBuilder < T , S >) this ;
142
+ this .nullValueDefault = supplier ;
143
+ return this ;
124
144
}
125
145
126
- JedisResultBuilder <T , S > convertPipelineAndTxResults (boolean flag ) {
146
+ JedisResultBuilder <T , R > convertPipelineAndTxResults (boolean flag ) {
127
147
128
148
convertPipelineAndTxResults = flag ;
129
149
return this ;
130
150
}
131
151
132
- JedisResult <T , S > build () {
133
- return new JedisResult (response , nullValueDefault , convertPipelineAndTxResults , converter );
152
+ /**
153
+ * @return a new {@link JedisResult} wrapper with configuration applied from this builder.
154
+ */
155
+ JedisResult <T , R > build () {
156
+ return new JedisResult <>(response , nullValueDefault , convertPipelineAndTxResults , converter );
134
157
}
135
158
159
+ /**
160
+ * @return a new {@link JedisStatusResult} wrapper for status results with configuration applied from this builder.
161
+ */
136
162
JedisStatusResult buildStatusResult () {
137
- return new JedisStatusResult (response , converter );
163
+ return new JedisStatusResult <> (response , converter );
138
164
}
139
165
}
140
166
}
0 commit comments