@@ -45,27 +45,34 @@ public Pool (boolean threadSafe, boolean softReferences) {
45
45
public Pool (boolean threadSafe , boolean softReferences , final int maximumCapacity ) {
46
46
Queue <T > queue ;
47
47
if (threadSafe )
48
- queue = new LinkedBlockingQueue (maximumCapacity );
48
+ queue = new LinkedBlockingQueue <T >(maximumCapacity ) {
49
+ @ Override
50
+ public boolean add (T o ) {
51
+ if (size () >= maximumCapacity ) return false ;
52
+ super .add (o );
53
+ return true ;
54
+ }
55
+ };
49
56
else if (softReferences ) {
50
- queue = new LinkedList () { // More efficient clean() than ArrayDeque.
57
+ queue = new LinkedList < T > () { // More efficient clean() than ArrayDeque.
51
58
@ Override
52
- public boolean add (Object object ) {
59
+ public boolean add (T object ) {
53
60
if (size () >= maximumCapacity ) return false ;
54
61
super .add (object );
55
62
return true ;
56
63
}
57
64
};
58
65
} else {
59
- queue = new ArrayDeque () {
66
+ queue = new ArrayDeque < T > () {
60
67
@ Override
61
- public boolean add ( Object object ) {
68
+ public boolean offer ( T object ) {
62
69
if (size () >= maximumCapacity ) return false ;
63
- super .add (object );
70
+ super .offer (object );
64
71
return true ;
65
72
}
66
73
};
67
74
}
68
- freeObjects = softReferences ? new SoftReferenceQueue ( queue ) : queue ;
75
+ freeObjects = softReferences ? new SoftReferenceQueue <>((( Queue < SoftReference < T >>) queue ) ) : queue ;
69
76
}
70
77
71
78
protected abstract T create ();
@@ -86,7 +93,7 @@ public void free (T object) {
86
93
if (object == null ) throw new IllegalArgumentException ("object cannot be null." );
87
94
reset (object );
88
95
if (!freeObjects .offer (object ) && freeObjects instanceof SoftReferenceQueue ) {
89
- ((SoftReferenceQueue )freeObjects ).cleanOne ();
96
+ ((SoftReferenceQueue < T > )freeObjects ).cleanOne ();
90
97
freeObjects .offer (object );
91
98
}
92
99
peak = Math .max (peak , freeObjects .size ());
@@ -108,7 +115,7 @@ public void clear () {
108
115
* capacity. It is not necessary to call {@link #clean()} before calling {@link #free(Object)}, which will try to remove an
109
116
* empty reference if the maximum capacity has been reached. */
110
117
public void clean () {
111
- if (freeObjects instanceof SoftReferenceQueue ) ((SoftReferenceQueue )freeObjects ).clean ();
118
+ if (freeObjects instanceof SoftReferenceQueue ) ((SoftReferenceQueue < T > )freeObjects ).clean ();
112
119
}
113
120
114
121
/** The number of objects available to be obtained.
@@ -140,16 +147,16 @@ public static interface Poolable {
140
147
/** Wraps queue values with {@link SoftReference} for {@link Pool}.
141
148
* @author Martin Grotzke */
142
149
static class SoftReferenceQueue <T > implements Queue <T > {
143
- private Queue delegate ;
150
+ private final Queue < SoftReference < T >> delegate ;
144
151
145
- public SoftReferenceQueue (Queue delegate ) {
152
+ public SoftReferenceQueue (Queue < SoftReference < T >> delegate ) {
146
153
this .delegate = delegate ;
147
154
}
148
155
149
156
@ Override
150
157
public T poll () {
151
158
while (true ) {
152
- SoftReference <T > reference = ( SoftReference < T >) delegate .poll ();
159
+ SoftReference <T > reference = delegate .poll ();
153
160
if (reference == null ) return null ;
154
161
T object = reference .get ();
155
162
if (object != null ) return object ;
@@ -158,7 +165,7 @@ public T poll () {
158
165
159
166
@ Override
160
167
public boolean offer (T e ) {
161
- return delegate .add (new SoftReference (e ));
168
+ return delegate .add (new SoftReference <> (e ));
162
169
}
163
170
164
171
@ Override
@@ -172,17 +179,16 @@ public void clear () {
172
179
}
173
180
174
181
void cleanOne () {
175
- for (Iterator iter = delegate .iterator (); iter .hasNext ();) {
176
- if ((( SoftReference ) iter .next () ).get () == null ) {
182
+ for (Iterator < SoftReference < T >> iter = delegate .iterator (); iter .hasNext ();) {
183
+ if (iter .next ().get () == null ) {
177
184
iter .remove ();
178
185
break ;
179
186
}
180
187
}
181
188
}
182
189
183
190
void clean () {
184
- for (Iterator iter = delegate .iterator (); iter .hasNext ();)
185
- if (((SoftReference )iter .next ()).get () == null ) iter .remove ();
191
+ delegate .removeIf (o -> o .get () == null );
186
192
}
187
193
188
194
@ Override
0 commit comments