2010-01-16 24 views
6

EDIT: rozwiązany, patrz poniżejJava - Upewnij się, że obiekt implementuje interfejs jest

Hi

w Javie, mam obiekt, który mógłby być dowolnej klasy. ALE - obiekt ten zawsze będzie musiał zaimplementować interfejs, więc gdy wołam metody zdefiniowane przez interfejs, ten obiekt będzie zawierał tę metodę.

Teraz, gdy próbujesz wywołać niestandardową metodę na ogólnym obiekcie w Javie, robi się to na maszynie do pisania. Jak mogę w jakiś sposób powiedzieć kompilatorowi, że mój obiekt implementuje ten interfejs, więc wywołanie metody jest w porządku.

Zasadniczo co szukam jest coś takiego:

Object(MyInterface) obj; // Now the compiler knows that obj implements the interface "MyInterface" 
obj.resolve(); // resolve() is defined in the interface "MyInterface" 

Jak mogę to zrobić w Java?

ODPOWIEDŹ: OK, jeśli interfejs jest nazwany MyInterface można po prostu umieścić

MyInterface obj; 
obj.resolve(); 

Przepraszamy za nie myśli przed wysłaniem ....

+0

* uśmiech * - +1 za ostatnią uwagę :-) –

Odpowiedz

1
if (object instanceof MyInterface) { 
    ((MyInterface) object).resolve(); 
} 
1
MyInterface a = (MyInterface) obj; 
a.resolve(); 

lub

((MyInterface)obj).resolve(); 

Kompilator java używa statycznego typu do ch eck dla metod, więc musisz albo rzucić obiekt do typu, który implementuje twój interfejs, albo rzucić go do samego interfejsu.

3

po prostu zrobić to z type cast:

((MyInterface) object).resolve(); 

Zazwyczaj najlepiej jest wykonać test, aby upewnić się, że ta obsada jest ważna - w przeciwnym razie dostaniesz ClassCastException. Nie można obstawić niczego, co nie zaimplementuje obiektu MyInterface w obiekcie MyInterface. Sposób przeprowadzania tej kontroli jest zgodny z operatorem instanceof:

if (object instanceof MyInterface) { 
    // cast it! 
} 
else { 
    // don't cast it! 
} 
Powiązane problemy