簡體   English   中英

Java - 將參數設置為Object,它既擴展了一個Object又實現了一個接口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM