class CheckoutStand {} class Office {}
public class Store extends ArrayList<Aisle> {
private ArrayList<CheckoutStand> checkouts =
new ArrayList<CheckoutStand>(); private Office office = new OfficeO. public Store(int nAisles, int nShelves, int nProducts) { for(int i = 0; i < nAisles; i++)
add(new Aisle(nShelves. nProducts));
}
public String toStringO {
StringBuilder result = new StringBuilderO; for(Aisle a this)
for(Shelf s : a)
for(Product p β’ s) {
result.append(p); result.append("\n").
}
return result.toStringO.
}
public static void main(String[] args) {
System out.printin(new Store(14, 5. 10)).
}
} /* Output.
258: Test, ΡΠ΅Π½Π°: $400.99 861- Test, ΡΠ΅Π½Π°- $160.99 868: Test, ΡΠ΅Π½Π°: $417.99 207- Test, ΡΠ΅Π½Π°- $268.99 551- Test. ΡΠ΅Π½Π°. $114.99 278: Test, ΡΠ΅Π½Π°: $804.99
520. Test, ΡΠ΅Π½Π°: $554.99 140: Test, ΡΠ΅Π½Π°: $530.99
*///;-
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Store.toString(), Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², Π½Π΅ Π»ΠΈΡΠ°ΡΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ² ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΡΡΠΈ. ΠΠΏΠ΅ΡΠ°ΡΠ»ΡΠ΅Ρ ΠΈ ΡΠΎ, ΡΡΠΎ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ Π·Π°ΠΌΠ΅ΡΠ½ΡΡ ΡΠΌΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠΈΠ»ΠΈΠΉ.
Π’Π°ΠΉΠ½Π° ΡΡΠΈΡΠ°Π½ΠΈΡ
ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΠΈΡΡΡΠΏΠ°Π΅ΡΠ΅ ΠΊ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΎΠΌΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²Π° Π½Π° ΠΏΠ΅ΡΠ²ΡΡ ΠΏΠΎΡΠ°Ρ Π²ΡΠ³Π»ΡΠ΄ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ°Π½Π½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΏΠΈΡΡ ArrayList.class Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°, Π° Π·Π°ΠΏΠΈΡΡ ArrayList<Integer>.class β Π½Π΅Ρ. ΠΠ»ΠΈ Π²ΠΎΠ·ΡΠΌΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ:
//: generics/ErasedTypeEquivalence.java import java.util.*;
public class ErasedTypeEquivalence {
public static void main(String[] args) {
Class cl = new ArrayList<String>().getClassO: Class c2 = new ArrayList<Integer>().getClass(), System.out.pri ntln(cl == c2);
}
} /* Output:
true
*///.-
ΠΡΠ»ΠΎ Π±Ρ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ArrayList<String> ΠΈ ArrayList<Integer> β ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ, ΠΈ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Integer Π² ArrayList<String> ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ (Π½Π΅ΡΠ΄Π°ΡΠ°) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΏΡΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Integer Π² ArrayList<Integer> (ΡΡΠΏΠ΅Ρ ). ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠΈ ΡΠΈΠΏΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΅ΡΠ΅ ΡΠΈΠ»ΡΠ½Π΅Π΅ Π·Π°ΠΏΡΡΡΠ²Π°Π΅Ρ ΡΠΈΡΡΠ°ΡΠΈΡ:
//. generics/Lostlnformation.java import java util *.
class Frob {} class Fnorkle {} class Quark<Q> {}
class Particle<POSITION,MOMENTUM> {}
public class Lostlnformation {
public static void main(String[] args) {
List<Frob> list = new ArrayList<Frob>(); Map<Frob,Fnorkle> map = new HashMap<Frob.Fnorkle>(); Quark<Fnorkle> quark = new Quark<Fnorkle>(); Particle<Long.Double> p = new Particle<Long.Double>(): System.out.pri ntln(Arrays.toStri ng(
list.getClass().getTypeParameters())); System out println(Arrays.toString(
map. getClassO .getTypeParametersO)). Π
ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ &
System out pri ntinCArrays.toStri ng(
qua rk.getClass().getTypePa rameters()));
System.out.pri ntinCArrays.toStri ng(
p.getClass().getTypePa rameters()));
}
} /* Output: [E]
[K. V] [Q]
[POSITION. MOMENTUM] *///:-
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ JDK, Class.getTypeParameters() Β«Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² TypeVariable, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΠΎΠ², ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ...Β» ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΠΏΠΎ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠ² β Π½ΠΎ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², Π²Ρ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΉ, Π° ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ°.
ΠΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ ΠΎΠ»ΠΎΠ΄Π½ΠΎΠΉ, Π±Π΅Π·Π΄ΡΡΠ½ΠΎΠΉ ΠΈΡΡΠΈΠ½Π΅:
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΡΠΈΠΏΠΎΠ² Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° Π²Π½ΡΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π½Π°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ° ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π½ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌΠΈ. ΠΡΠΎΡ ΡΠ°ΠΊΡ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°ΡΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² Ρ ΠΎΠΏΡΡΠΎΠΌ ΡΠ°Π±ΠΎΡΡ Π½Π° Π‘++, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΡΠ°ΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΠΈ Π² Java.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΡ Π² Java ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠΈΡΠ°Π½ΠΈΡ (erasure). ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ ΡΡΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ. ΠΠ½ΡΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²Ρ Π·Π½Π°Π΅ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, List<String> ΠΈ List<Integer> Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΈΠΏΠΎΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ; ΠΎΠ±Π΅ ΡΠΎΡΠΌΡ Β«ΡΡΠΈΡΠ°ΡΡΡΡΒ» Π΄ΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° List. ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΡΠ΅Π³ΡΠ°Π΄ΠΎΠΉ ΠΏΡΠΈ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΠΈ Π² Java; ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΡΠ°Π·Π΄Π΅Π».
ΠΠΎΠ΄Ρ ΠΎΠ΄ Π‘++
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ Π½Π° Π‘++, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π·Π½Π°ΠΊΠΎΠΌΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ Π‘++ Π±ΡΠ»ΠΈ Π²Π·ΡΡΡ Π·Π° ΠΎΡΠ½ΠΎΠ²Ρ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Java:
//: generics/Templates.cpp #include <iostream> using namespace std:
tempiate<class T> class Manipulator {
T obj: public:
Manipulatory x) { obj = x; } void manipulateO { obj.fO; }
}:
class HasF { public:
void f() { cout Β« "HasF::f()" Β« endl; }
}:
int mainO { HasF hf.
Manipulator<HasF> manipulator(hf): manipulator manipulateO. } /* Output HasF-:f()
III ~
ΠΠ»Π°ΡΡ Manipulator Ρ ΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° Π’. ΠΠ°Ρ Π·Π΄Π΅ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ manipulateO, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ f() Π΄Π»Ρ obj. ΠΠ°ΠΊ ΠΎΠ½ ΡΠ·Π½Π°Π΅Ρ, ΡΡΠΎ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ° Π’ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ f()? ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π‘++ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΡΠΎΡΠΊΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Manipulator<HasF> ΠΎΠ½ ΡΠ·Π½Π°Π΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ HasF ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ f(). Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΡΠΈΠΏΠΎΠ² ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ.
ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π½Π° Π‘++ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π° ΠΊΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½Π° Π·Π½Π°Π΅Ρ ΡΠΈΠΏ ΡΠ²ΠΎΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². Π‘ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Java Π΄Π΅Π»ΠΎ ΠΎΠ±ΡΡΠΎΠΈΡ ΠΈΠ½Π°ΡΠ΅. ΠΠΎΡ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²Π΅ΡΡΠΈΡ HasF, ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π° Java:
II. generics/HasF java
public class HasF {
public void f() { System.out.printlnC'HasF.f()"); } } ///:-
ΠΡΠ»ΠΈ ΠΌΡ Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ΅ΠΌ Π΅Π³ΠΎ Π½Π° Java, ΠΎΠ½ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ:
//: generics/Manipulation.java // {CompileTimeError} (He ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ)
class Manipulator<T> { private T obj:
public Manipulator^ x) { obj = x; }
// ΠΡΠΈΠ±ΠΊΠ°: Π½Π΅ ΡΠ΄Π°Π΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΠΌΡ: ΠΌΠ΅ΡΠΎΠ΄ f():
public void manipulateO { obj.fO; }
}
public class Manipulation {
public static void main(String[] args) { HasF hf = new HasFO; Mampulator<HasF> manipulator =
new Manipulator<HasF>(hf); manipulator.manipulateO:
}
} ///:-
ΠΠ·-Π·Π° ΡΡΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Java Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π° f() Π΄Π»Ρ obj ΠΈΠ· manipulateO Ρ ΡΠ΅ΠΌ ΡΠ°ΠΊΡΠΎΠΌ, ΡΡΠΎ HasF ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ f(). Π§ΡΠΎΠ±Ρ Π²ΡΠ·Π²Π°ΡΡ f(), ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Β«ΠΏΠΎΠΌΠΎΡΡΒ» ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅ΠΌΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅; ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ extends. ΠΡΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ:
//: generics/Manipulator2 java
class Manipulator2<T extends HasF> { private T obj;
public Manipulator2(T x) { obj = x; } public void manipulateO { obj.fO; }
} ///.-
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ <T extends HasF> ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π’ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ ΡΠΈΠΏΡ HasF ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌΡ ΠΎΡ Π½Π΅Π³ΠΎ. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΡΠΎ Π²ΡΠ·ΠΎΠ² f() Π΄Π»Ρ obj Π±Π΅Π·ΠΎΠΏΠ°ΡΠ΅Π½.
ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° ΡΡΠΈΡΠ°Π΅ΡΡΡ Π΄ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ (ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ). ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΡΡΠΈΡΠ°Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ°. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° Π΅Π³ΠΎ Β«ΡΡΠ΅ΡΡΠΎΠΉΒ» Π²Π΅ΡΡΠΈΠ΅ΠΉ, ΡΠ°ΠΊ ΡΡΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π’ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π΄ΠΎ HasF, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΈ Π·Π°ΠΌΠ΅Π½Π΅ Π’ Π½Π° HasF Π² ΡΠ΅Π»Π΅ ΠΊΠ»Π°ΡΡΠ°.
Π‘ΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎΡΡΠΈ ΡΠ°Π΄ΠΈ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π² Manipulation2.java ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·Ρ Π½Π΅ Π΄Π°Π΅Ρ. Π‘ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΡΡΠΏΠ΅Ρ ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΎΠ·Π΄Π°Π² Π½Π΅ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ:
//β’ generics/Manipulator3.java
class Manipulators { private HasF obj,
public Manipulator3(HasF x) { obj = x; } public void manipulateO { obj f(), }
} III ~
ΠΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠΌ ΠΊ Π²Π°ΠΆΠ½ΠΎΠΌΡ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ: ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠ², Π±ΠΎΠ»Π΅Π΅ Β«ΠΎΠ±ΡΠΈΠ΅Β», Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ (ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΎΡ Π½Π΅Π³ΠΎ), ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠ² ΠΈ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠΏΡΠΎΡΠ΅ΠΌ, ΡΡΠΎ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΎΡΠΌΠ° <Π’ extends HasF> ΡΠ΅ΠΌ-ΡΠΎ ΡΡΠ΅ΡΠ±Π½Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΊΠ»Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ΅ΡΠΎΠ΄, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ Π’, ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Π²Π΅ΡΠ½Π΅Ρ ΡΠΎΡΠ½ΡΠΉ ΡΠΈΠΏ:
// generics/ReturnGenericType.java
class ReturnGenericType<T extends HasF> { private T obj,
public ReturnGenericType(T x) { obj = x; } public T get Π { return obj; }
} ///:-
ΠΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»ΠΈ ΠΎΠ½ Β«ΡΠ»ΠΎΠΆΠ΅Π½Β» Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅.
ΠΠΈΠ³ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ
Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π²ΡΠ΅Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ Π½Π΅Π΄ΠΎΡΠ°Π·ΡΠΌΠ΅Π½ΠΈΠΉ ΡΠΎ ΡΡΠΈΡΠ°Π½ΠΈΠ΅ΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅ΡΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΡΠ·ΡΠΊΠ°. Π‘ΠΊΠΎΡΠ΅Π΅ ΡΡΠΎ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΠΈ Π² Java, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΡ Π½Π΅ ΡΠ²Π»ΡΠ»Π°ΡΡ ΡΠ°ΡΡΡΡ ΡΠ·ΡΠΊΠ° Π² Π΅Π³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΡΠΎΡ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π½Π΅ΡΠ΄ΠΎΠ±ΡΡΠ²Π°, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΡΠΊΠΎΡΠ΅Π΅ ΠΏΡΠΈΠ²ΡΠΊΠ½ΡΡΡ ΠΊ Π½Π΅ΠΌΡ ΠΈ ΠΏΠΎΠ½ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
ΠΡΠ»ΠΈ Π±Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ»Π° ΡΠ°ΡΡΡΡ Java 1.0, ΡΠΎ Π΄Π»Ρ Π΅Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΈΡΠ°Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π±Ρ β ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠ² ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΈ Π±Ρ ΡΠ²ΠΎΠΉ ΡΡΠ°ΡΡΡ ΡΠ°Π²Π½ΠΎΠΏΡΠ°Π²Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠ·ΡΠΊΠ°, ΠΈ Ρ Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΈΠΏΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ ΠΈ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠΎΠ·Π΄Π½Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Β«ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΡΡΡΒ» ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ². ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΡ Π² Java Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΡΠΈΠ½ΠΎΡΠΈΡ ΠΏΠΎΠ»ΡΠ·Ρ, Π½ΠΎ Π½Π΅ ΡΠ°ΠΊΡΡ, ΠΊΠ°ΠΊΡΡ ΠΌΠΎΠ³Π»Π° Π±Ρ ΠΏΡΠΈΠ½ΠΎΡΠΈΡΡ, ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΠΎΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΈΡΠ°Π½ΠΈΠ΅.
Π ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π½Π° ΡΡΠΈΡΠ°Π½ΠΈΠΈ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΠΏΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π²ΡΠΎΡΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ·ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²Π°ΠΆΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ . ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΠΈΠΏΠΎΠ², ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΈΠΏ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ^ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ Π²Π΅ΡΡ Π½ΠΈΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π²ΠΈΠ΄Π° List<T> ΡΡΠΈΡΠ°Π΅ΡΡΡ Π΄ΠΎ List, Π° ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΠ° β Π΄ΠΎ Object, Π΅ΡΠ»ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ.