[英]Java - Setting Parameter as Object which both extends one Object and implements an Interface
我想知道是否可以將方法的參數設置為Object,它必須是一個擴展的類並實現另一個類。 這是一個例子:假設我有一個名為ClassA的類和一個名為MyInterface的接口。
public class ClassA {
/* code */
}
public interface MyInterface {
/* code */
}
讓我們說其他地方有一個名為ClassB的類,它們都擴展了ClassA並實現了MyInterface。
public class ClassB extends ClassA implements MyInterface {
/* code */
}
我也可以有一個ClassC,它還擴展了ClassA並實現了MyInterface:
public class ClassC extends ClassA implements MyInterface {
/* code */
}
我的問題是:
假設我有一個名為method1的方法,在method1中我希望有一個接受Object的參數。 假設我希望這個Object要么是ClassA的子類,要么實際上是ClassA本身。 這很容易做到:
public void method1(ClassA parameter) {
}
假設我也想要一個方法2,並且在方法2中我想要一個接受任何實現MyInterface的參數的參數。 同樣,這很容易:
public void method2(MyInterface parameter) {
}
但是如果我想要一個method3,並且我希望有一個參數只接受ClassA的子類或ClassA本身,並且實現MyInterface,那么接受ClassB和ClassC,但不接受任何只擴展ClassA的類,或者只實現MyInterface,或者兩者都不實現。 喜歡:
public void method3 ([Something that extends ClassA implements MyInterface] parameter) {
/* code */
}
您可以執行以下操作:
public <A extends ClassA & MyInterface> void method3(A parameter) { ... }
但我不認為這是一個好主意 - 如果你有一個擴展ClassA
的對象概念並實現MyInterface
,那么創建一個單獨的類或接口來表示這個概念會更好。
根據您的描述,您似乎需要其他類型的Object。 一個既擴展了ClassA 又實現了MyInterface。 也許,甚至,這是一個抽象的類。
然后我會使用這個新對象作為method3的參數類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.