ΠΠ»Π°ΡΡ Class (ΡΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅) ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ (reflection), Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° java. lang. reflect, ΡΠΎΡΡΠΎΡΡΠ°Ρ ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ² Field, Method ΠΈ Constructor (ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Member). ΠΠ±ΡΠ΅ΠΊΡΡ ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΎΠ·Π΄Π°ΡΡΡΡ JVM, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ»Π΅Π½Ρ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΠ±ΡΠ΅ΠΊΡΡ Constructor ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ°, ΠΌΠ΅ΡΠΎΠ΄Ρ get() ΠΈ set() β Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠ»Π°ΡΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Field, ΠΌΠ΅ΡΠΎΠ΄ invoke() β Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Method. ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ Π² ΠΊΠ»Π°ΡΡΠ΅ Class ΠΈΠΌΠ΅ΡΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ getFields(), getMethods() ΠΈ getConstruc-tors(), ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠ»Ρ ΠΊΠ»Π°ΡΡΠ°, Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ. (ΠΠ° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° Class Π² ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ JDK.) Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΏΡΡΠΌΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π² Π΅Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΠΏΠ°Π΄Π°Π΅Ρ.
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ Π² ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ΅ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ²Π΅ΡΡ ΡΠ΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° JVM ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ ΠΈ Π²ΠΈΠ΄ΠΈΡ, ΡΡΠΎ ΠΎΠ½ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ (ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ RTTI), Π½ΠΎ, ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Ρ Π½ΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Class. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ°ΠΉΠ» .class Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ JVM Π»ΠΈΠ±ΠΎ Π² ΡΠ΅ΡΠΈ, Π»ΠΈΠ±ΠΎ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΡΡΠΈΠ½Π½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌ RTTI ΠΈ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠ΅ΠΉ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ RTTI ΡΠ°ΠΉΠ» .class ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Β«Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΌΒ» ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ ΡΠ°ΠΉΠ» .class Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½; ΠΎΠ½ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ ΠΊΠ»Π°ΡΡΠ°
Π Π΅ΡΠ»Π΅ΠΊΡΠΈΡ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π°ΠΏΡΡΠΌΡΡ; ΠΎΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² ΡΠ·ΡΠΊΠ΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄ΡΡΠ³ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ JavaBeans. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ»Π°ΡΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠ°.
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Π½Π° ΡΠΊΡΠ°Π½ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π±ΡΠ΄ΡΡ Π²ΠΈΠ΄Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅. ΠΠΎ Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΅ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΈΠ· Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠΊΠ°ΡΡ ΠΈΡ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΈ Π΄ΠΎΠ»Π³ΠΎ21. Π ΡΡΠ°ΡΡΡΡ, ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π²ΡΠ²ΠΎΠ΄ΡΡΠΈΠΉ ΠΏΠΎΠ»Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΊΠ»Π°ΡΡΠ°. ΠΠΎΡ ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
//: typeinfo/ShowMethods.java
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
// ΠΊΠ»Π°ΡΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅.
// {Args: ShowMethods}
import java.lang.reflect.*;
import java.util.regex.*;
import static net.mindview.util.Print.*;
public class ShowMethods {
private static String usage = "usage:\n" +
"ShowMethods qualified.class.name\n" + "To show all methods in class or:\n" + "ShowMethods qualified.class.name word\n" + "To search for methods involving 'word'"; private static Pattern p = Pattern.compile("\\w+\\."); public static void main(String[] args) { if(args.length < 1) { print(usage);
System exit(O);
}
int lines = 0; try {
Class<?> Ρ = Class.forName(args[0]); Method[] methods = c.getMethods(); Constructor[] ctors = c.getConstructorsO; if(args.length == 1) {
for(Method method . methods) print(
p.matcher(method.toStri ng()).replaceAl
1Π‘"));
for(Constructor ctor β’ ctors)
pri nt(p.matcher(ctor.toStri ng()).replaceAl1("")
);
lines = methods.length + ctors.length,
} else {
for(Method method : methods)
if (method. toStringO. indexOf(args[l]) != -1) { print(
p.matcher(method.toStri ng Π)
replaceAll (""));
lines++;
}
for(Constructor ctor : ctors)
if(ctor.toStringO.indexOf(args[l]) != -1) { print(p.matcher(
ctor.toStri ng Π).replaceAl 1 ("
lines++;
}
}
} catch(ClassNotFoundException e) {
print("No such class: " + e):
}
}
} /* Output:
public static void main(String[]) public native int hashCodeO public final native Class getClassO
public final void wait(long.int) throws InterruptedException public final void waitO throws InterruptedException public final native void wait(long) throws InterruptedException public boolean equals(Object) public String toStringO public final native void notifyΠ public final native void notifyAllO public ShowMethodsO *///:-
ΠΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ° Class getMethods() ΠΈ getConstructors() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Method ΠΈ Constructor, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΊΠ»Π°ΡΡΠ°. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠΌΠ΅Π½, Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ². ΠΠΏΡΠΎΡΠ΅ΠΌ, ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ toString(), ΠΊΠ°ΠΊ ΠΈ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π·Π΄Π΅ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠΎΠΊΡ Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΡΠ°Π·Π±ΠΈΡΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π·ΡΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ indexOf()), Π° ΠΏΠΎΡΠ»Π΅ Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»ΠΈ ΠΈΠΌΠ΅Π½ ΠΊΠ»Π°ΡΡΠΎΠ².
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΎΡ Class.forName(), Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠ³Π½Π°ΡΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π²Ρ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΡΡΠΈΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ ΠΈΠ· JDK, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Β«Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎΒ» Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ). Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Π°ΠΌ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ, Π½ΠΎ ΡΠ°ΠΌ ΡΠ°ΠΊΡ ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½.
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
java ShowMethods ShowMethods
ΠΠ° ΡΠΊΡΠ°Π½ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΠΊΡΡΡΡΠΉ (public) ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Ρ ΠΎΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ. Π’ΠΎΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅ ΠΊΠ»Π°ΡΡ ShowMethods Π½Π΅ ΠΎΡΠΊΡΡΡΡΠΌ (ΡΠ΄Π°Π»ΠΈΡΠ΅ ΠΈΠ· Π΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄ΠΎΡΡΡΠΏΠ° public, ΡΠΎ Π΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π΅ΠΌΡ Π΄ΠΎΡΡΡΠΏ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΏΠ°ΠΊΠ΅ΡΠ°), ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈΡΡΠ΅Π·Π½Π΅Ρ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². Π‘Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΡΠΎΠ²Π΅Π½Ρ Π΄ΠΎΡΡΡΠΏΠ°, ΡΡΠΎ ΠΈ Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡ.
Π’Π°ΠΊΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π²ΠΈΠ΄Π΅
java ShowMethods java lang String
Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° char, int, String ΠΈ Ρ. ΠΏ.
ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π²Π°ΠΌ Π½Π΅ΠΌΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΌΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠΈΠ½Π°ΡΡ, Π΅ΡΡΡ Π»ΠΈ Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ·Π½Π°ΡΡ, ΠΈΠΌΠ΅ΡΡΡΡ Π»ΠΈ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Color, ΠΈ Ρ. Π΄.
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠΈ
Β«ΠΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΒ» (proxy) ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΊ ΡΠΈΡΠ»Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π° ΠΌΠ΅ΡΡΠΎ Β«Π½Π°ΡΡΠΎΡΡΠ΅Π³ΠΎΒ» ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π΅Π³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΡΠΈΠ²Π΅Π΄Ρ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠ°:
//. typeinfo/SimpleProxyDemo java import static net mindview.util Print *,
interface Interface { void doSomethingO; void somethingElse(String arg).
}
class Real Object implements Interface {
public void doSomethingO { printC'doSomething"); } public void somethingElse(String arg) { printC'somethingElse " + arg),
}
}
class SimpleProxy implements Interface { private Interface proxied, public SimpleProxy(Interface proxied) { this.proxied = proxied,
}
public void doSomethingO {
print("SimpleProxy doSomething"), proxied doSomethingO,
}
public void somethingElse(String arg) {
print("SimpleProxy somethingElse " + arg); proxied.somethingElse(arg);
}
class SimpleProxyDemo {
public static void consumer^Interface iface) { iface doSomethingO; iface somethingElseC'bonobo");
}
public static void main(String[] args) { consumer(new RealObjectO), consumer(new SimpleProxy(new RealObjectO)),
}
} /* Output doSomething somethingElse bonobo SimpleProxy doSomething doSomething
SimpleProxy somethingElse bonobo
somethingElse bonobo */// ~
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ consumer() ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Interface, ΠΎΠ½ Π½Π΅ Π·Π½Π°Π΅Ρ, ΡΡΠΎ Π΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ β Β«Π½Π°ΡΡΠΎΡΡΠΈΠΉΒ» ΠΎΠ±ΡΠ΅ΠΊΡ (RealObject) ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊ (Proxy), ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ±Π° ΡΠΈΠΏΠ° ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Interface. ΠΠ±ΡΠ΅ΠΊΡ Proxy, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ Β«Π½Π°ΡΡΠΎΡΡΠΈΠΌΒ» ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ RealObject.
ΠΠΎΡΡΠ΅Π΄Π½ΠΈΠΊ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΡ Β«Π½Π°ΡΡΠΎΡΡΠ΅Π³ΠΎΒ» ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΈΠ· ΡΠ΅ΠΆΠΈΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠΊΠ°Π·Π° ΠΎΡ Π½ΠΈΡ (ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ β Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠ΅Π»ΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΎΠΏΡΠ°Π²Π΄Π°Π½ΠΈΡ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎ-ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ). ΠΠΎΠΏΡΡΡΠΈΠΌ, Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π²ΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² RealObject, ΠΈΠ·ΠΌΠ΅ΡΡΡΡ Π·Π°ΡΡΠ°ΡΡ Π½Π° ΡΡΠΈ Π²ΡΠ·ΠΎΠ²Ρ, ΠΈ Ρ. Π΄. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ±ΡΠ°ΡΡ Π΅Π³ΠΎ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠΈ Java ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠ° β ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ, ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΎΠΏΠΎΡΡΠ΅Π΄ΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΎΠΆΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ. ΠΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ, ΠΎΠ±ΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΡ, ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΎ ΡΡΠΎ Π·Π° Π²ΡΠ·ΠΎΠ² ΠΈ ΠΊΠ°ΠΊ Ρ Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΡΡΡΠΏΠΈΡΡ. ΠΠΎΡ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ SimpleProxyDemo.java, ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠ°:
// typeinfo/SimpleDynamicProxy java import java lang.reflect *.
class DynamicProxyHandler implements InvocationHandler { private Object proxied; public DynamicProxyHandler(Object proxied) { this proxied = proxied,
}
public Object
invoke(Object proxy, Method method, Object[] args) throws Throwable {
System out.printlnC'**** proxy. " + proxy.getClass() +
method- " + method + ", args " + args); if(args != nul 1) ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ &
for(Object arg : args)
System.out.println(" " + arg); return method.invoke(proxied, args);
}
}
class SimpleDynamicProxy {
public static void consumer(Interface iface) { iface.doSomething(); i face.somethi ngElse("bonobo");
}
public static void main(String[] args) {
Real Object real = new Real ObjectΠ; consumer(real);
// ΠΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠ° ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠ½ΠΎΠ²Π°: Interface proxy = (Interface)Proxy.newProxyInstance( Interface.class.getClassLoader(), new Class[]{ Interface.class }. new DynamicProxyHandler(real)); consumer(proxy);