Sobes.tech
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
    }
}