Effective Java


// Default method added to the Collection interface in Java 8



Download 2,19 Mb.
Pdf ko'rish
bet98/341
Sana11.07.2022
Hajmi2,19 Mb.
#776765
1   ...   94   95   96   97   98   99   100   101   ...   341
Bog'liq
Effective Java

// Default method added to the Collection interface in Java 8
default boolean removeIf(Predicate filter) {
Objects.requireNonNull(filter);
boolean result = false;
for (Iterator it = iterator(); it.hasNext(); ) {
if (filter.test(it.next())) {
it.remove();
result = true;
}
}
return result;
}


ITEM 21: DESIGN INTERFACES FOR POSTERITY
105
This is the best general-purpose implementation one could possibly write for
the 
removeIf
method, but sadly, it fails on some real-world 
Collection
implementations. For example, consider 
org.apache.commons.collections4.-
collection.SynchronizedCollection
. This class, from the Apache Commons
library, is similar to the one returned by the static factory 
Collections.-
synchronizedCollection
in 
java.util
. The Apache version additionally
provides the ability to use a client-supplied object for locking, in place of the
collection. In other words, it is a wrapper class (Item 18), all of whose methods
synchronize on a locking object before delegating to the wrapped collection. 
The Apache 
SynchronizedCollection
class is still being actively main-
tained, but as of this writing, it does not override the 
removeIf
method. If this
class is used in conjunction with Java 8, it will therefore inherit the default imple-
mentation of 
removeIf
, which does not, indeed 
cannot
, maintain the class’s funda-
mental promise: to automatically synchronize around each method invocation. The
default implementation knows nothing about synchronization and has no access to
the field that contains the locking object. If a client calls the 
removeIf
method on

SynchronizedCollection
instance in the presence of concurrent modification
of the collection by another thread, a 
ConcurrentModificationException
or
other unspecified behavior may result.
In order to prevent this from happening in similar Java platform libraries
implementations, such as the package-private class returned by 
Collec-
tions.synchronizedCollection
, the JDK maintainers had to override the
default 
removeIf
implementation and other methods like it to perform the neces-
sary synchronization before invoking the default implementation. Preexisting col-
lection implementations that were not part of the Java platform did not have the
opportunity to make analogous changes in lockstep with the interface change, and
some have yet to do so. 

Download 2,19 Mb.

Do'stlaringiz bilan baham:
1   ...   94   95   96   97   98   99   100   101   ...   341




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish