2010-01-16 19 views
6

EDIT uygular: çözüldü,Java - emin olun bir nesne bir arayüz

Hi altında Java'da

görüyorum, herhangi bir sınıfın olabilir bir nesne var. AMA - bu nesne her zaman bir arayüz uygulamak zorunda kalacaktır, bu yüzden arayüz tarafından tanımlanan yöntemleri çağırdığımda, o nesne bu nesneyi içerecektir.

Artık, Java'da genel bir nesne üzerinde özel bir yöntem çağırmayı denediğinizde, yazım hakkında yazıyor. Bir şekilde derleyicime, nesneyimin bu arabirimi gerçekleştirdiğini nasıl anlatabilirim, bu nedenle yöntemin çağrılması tamam.

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

Nasıl Java yapabilirsiniz:

Temelde, için ne arıyorum böyle bir şeydir?

CEVAP: arayüz MyInterface adlı Tamam, eğer sen .... göndermeden önce düşünmüyordum için

MyInterface obj; 
obj.resolve(); 

Maalesef

+0

* Son sözünüz için * +1 + gülümse –

cevap

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

veya

((MyInterface)obj).resolve(); 
koyabilirsiniz

java derleyicisi, statik türünü ch olarak kullanır. yöntemleri için kullanmayın, böylece nesneyi arabiriminizi uygulayan veya arabirime dönüştüren bir türe dönüştürmeniz gerekir.

3

Sadece bir type cast ile bunu:

((MyInterface) object).resolve(); 

Genellikle bu atama geçerli olduğundan emin olmak için bir kontrol yapmak en iyisidir - Aksi, bir ClassCastException alırsınız. MyInterface'u MyInterface nesnesine uygulamayan hiçbir şey alamıyorsunuz. Bu denetimi yapma şekliniz instanceof operatörüyle:

if (object instanceof MyInterface) { 
    // cast it! 
} 
else { 
    // don't cast it! 
} 
İlgili konular