[英]How to find out which interface a method was called on?
我有一個簡單的Java問題。 考慮以下接口:
interface A {
void work();
void a();
}
interface B {
void work();
void b();
}
所以當一個類要實現它們時,它應該是這樣的:
class Impl implements A, B {
void work() {
/*some business*/
}
void a() {}
void b() {}
}
我的問題是,在work
方法中,我如何發現它,它是由類型A
或B
調用的?
C#中的上述類就是這樣,這樣可以很好地區分兩個實現:
class Impl : A, B
{
void B::work() {}
void A::work() {}
void a() {}
void b() {}
}
但是我如何在Java中實現類似C#模型的東西?!
提前致謝。
都不是。 interface
的概念是實現它的類,與接口所暗示的“契約”一致。 如果你有兩個接口,要求實現方法work()
和實現兩個接口的類,那么它必須實現work()
以同意兩者的契約。
JavaDoc說:
實現接口允許類對其承諾提供的行為變得更加正式。 接口在類和外部世界之間形成契約,並且該合同在構建時由編譯器強制執行。 如果您的類聲稱實現了一個接口,那么該接口定義的所有方法必須在其成功編譯之前出現在其源代碼中。
這正是您通過實現work()
方法所做的事情:您同時滿足接口A
和B
您的界面僅告訴您實現類需要提供的方法的簽名。 在您的示例中, A
和B
要求方法work()
具有返回類型的void
。 所以基本上他們都要求采用相同的方法。 我不知道你怎么可能或需要區分?
您可能遇到diamand實現問題。 你需要自己指定它。
void work() { A.super.work(); } // or B.super.work();
方法work
將滿足兩個接口的要求。 該方法包含在類中,可以實例化兩個接口。 為了實現接口,類必須擁有接口中指定的方法。 如果使用相同的方法來滿足多個接口的要求並不重要。
JVM不會調用A或B,而只調用Impl實現。 您可以轉換回A或B,並且您的客戶端可以根據特定接口中可用的方法調用方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.