[英]Java: Put objects of different types into a ArrayList for a ModelCollection. Interfaces?
[英]Pull out certain objects from an ArrayList of Interfaces in Java?
我需要從一個由接口鍵入的ArrayList
中的一些對象中調用一個方法(這里我們將其稱為接口)。
ArrayList<Interface> obj = new ArrayList();
obj.stream().forEachOrdered((o) -> {
if (/*If o extends ObjectA then run this next line*/) {
o.methodCallNotInTheInterface();
}
});
我的問題是o
只能看到接口的方法和變量,而沒有其他東西。
我認為您可能正在尋找關鍵字的instanceof
。
if (o instanecof ObjectA) { ...}
也就是說, instanceof
使用通常表示代碼有氣味 ,您的設計可能不應該包含未實現的方法,並且如果由於某種原因它確實具有這樣的方法,請使其拋出異常( NotImplementedException
)。
您可以使用instanceof
運算符來確定您的對象是否為正確的類型:
List<Interface> obj = new ArrayList<>();
obj.stream().forEachOrdered(o -> {
if (o instanceof ObjectA) {
((ObjectA) o).methodCallNotInTheInterface();
}
});
請注意,如果o
為null, instanceof
也將返回false
,因此您無需進行檢查。
首先檢查o
的類型:
if (o instanecof ObjectA)
然后將o
轉換為ObjectA
類型:
((ObjectA)o).method();
使用流時,可以使用謂詞過濾所需的值,然后將函數應用於過濾后的值。 該函數將簡單地將值轉換為所需的類。
考慮以下數字列表:
List<Number> list = new ArrayList<>(Arrays.asList(1, new BigDecimal("2.22"), 3l));
然后,如果只需要在BigDecimal
實例上調用方法,則可以通過以下方式進行操作:
list.stream()
.filter(n -> n instanceof BigDecimal)
.map(n -> (BigDecimal) n)
.forEachOrdered(n -> System.out.println(n.pow(2))); // 4.9284
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.