Witajcie!
Nie rozumiem, dlaczego nie chce to działać:
Mam swój własny, bardzo prosty interfejs:
public interface Interfejs
{
public void print();
}
```
Oraz równie prostą, implementującą go klasę:
```java
public class Klasa implements Interfejs
{
@Override
public void print()
{
System.out.println("CosTam");
}
}
```
Teraz chciałbym zrobić klasę pośredniczącą, która będzie mnie informowała, jeśli metoda klasy opakowanej będzie wykonywana:
```java
import java.lang.reflect.*;
public class Spy implements InvocationHandler
{
private Object target;
public Spy(Object target)
{
this.target = target;
}
@Override
public Object invoke (Object proxy, Method method, Object[] args) throws Throwable
{
System.out.println("\nInformacja.");
return method.invoke(target, args);
}
}
```
No i ostatecznie tworzę klasę, która mi to przetestuje:
```java
import java.lang.reflect.*;
public class Test
{
public static void main(String[] args) throws Throwable
{
Klasa klasa = new Klasa();
InvocationHandler handler = new Spy(klasa);
Object proxy = Proxy.newProxyInstance( ClassLoader.getSystemClassLoader(), new Class[] { Interfejs.class } , handler);
proxy.print(); //BŁĄD
}
}
```
Mam wrażenie, że nie rozumiem czegoś związanego z mechanizmami klas pośredniczących.
Według książki, z której się uczę:
Klasa pośrednicząca zawiera następujące metody:
a) wszystkie metody wymagane przez określone interfejsy;
b) wszystkie metody zdefiniowane w klasie Object.
Więc dlaczego nie mogę wywołać na rzecz jej obiektu metody wymaganej przez mój interfejs?