Junior
Ποιοι είναι οι λόγοι για τη χρήση των κλάσεων Wrapper;
sobes.tech AI
Απάντηση από AI
- Δοκιμή ιδιωτικών μεθόδων
- Ενσωμάτωση με κώδικα legacy
- "Ελαφρύνσεις" πολύπλοκων διεπαφών
- Παροχή πρόσθετης λειτουργικότητας (καταγραφή, μετρήσεις, διαχείριση σφαλμάτων)
- Προσαρμογή εξωτερικών βιβλιοθηκών στις απαιτήσεις του έργου
- Προσομοίωση της συμπεριφοράς εξωτερικών υπηρεσιών (mock, stub)
Για παράδειγμα, ένα wrapper για δοκιμή ιδιωτικής μεθόδου σε Java:
import java.lang.reflect.Method;
public class PrivateMethodWrapper {
private Object instance;
private Class<?> clazz;
public PrivateMethodWrapper(Object instance) {
this.instance = instance;
this.clazz = instance.getClass();
}
public Object invokePrivateMethod(String methodName, Object... args) throws Exception {
Method method = clazz.getDeclaredMethod(methodName, getParameterTypes(args));
method.setAccessible(true);
return method.invoke(instance, args);
}
private Class<?>[] getParameterTypes(Object... args) {
Class<?>[] types = new Class<?>[args.length];
for (int i = 0; i < args.length; i++) {
types[i] = args[i].getClass();
}
return types;
}
}
Χρήση του wrapper:
// Κλάση με ιδιωτική μέθοδο
class MyClass {
private int privateMethod(int a, int b) {
return a + b;
}
}
// Δοκιμή της ιδιωτικής μεθόδου με το wrapper
public class MyClassTest {
public void testPrivateMethod() throws Exception {
MyClass instance = new MyClass();
PrivateMethodWrapper wrapper = new PrivateMethodWrapper(instance);
Object result = wrapper.invokePrivateMethod("privateMethod", 2, 3);
System.out.println("Αποτέλεσμα: " + result); // Έξοδος: Αποτέλεσμα: 5
}
}