2014-02-28 56 views
0

如果我有一組應該全部實現特定接口的模型,我應該在循環遍歷模型時以及在調用每個模型的已實現方法之前使用instanceof嗎?我是否應該始終使用instanceof - 數組模型

這是好/壞?

+1

你爲什麼要調用instanceof?多態性的要點是能夠在不知道和關心其具體類型的情況下調用對象上的方法。它實現了界面,這就是你需要知道的一切。 –

+0

,因爲它們在一個數組中,並且數組中的元素可以是不同的類型 –

+0

它們都是相同的類型:它們都實現的接口。在Foo []數組中,每個元素都是Foo。有些可能是FooImpl1的實例,還有一些是FooImpl2的實例,但它們都是Foo。這就是所有你需要知道的調用在Foo中聲明的方法。 –

回答

0

爲了上帝的緣故!決不!

你已經有了你需要的方法的接口,你不想實例化它們,沒有理由。事實上,(幾乎)從來沒有理由使用instanceof:D。

+0

我的意思是我同意'instanceOf'的使用應該是不鼓勵的,但有些情況下需要使用它,就像你從外部源接收一個對象,它可能在網絡上或從磁盤讀取,以知道類型在運行時,應該使用'instanceOf'。 –

+0

我特別要求在對象是數組元素的情況下。該數組可以有不同類型的不同元素,所以當循環播放它們時,我怎麼知道調用接口方法是安全的 –

+0

我同意@MartyWallace如果一個人不確定typeof元素,可能需要知道instanceOf排列 – abnvp

0

這個好/壞?

不好:)但如果你只有一個數組,你沒有別的辦法。但我會建議實施一個存儲與封裝的許多不同陣列:

public class Field { 
    private Shape[] shapes = ... 
    private Circle[] circles = ... 
    private Rectangle[] rectangles = ... 

    public void addCircle(Circle c) { 
     shapes[...] = c; 
     circles[...] = c; 
    } 

    public Shape[] getShapes() { 
     return shapes; 
    } 

    public Circle[] getCircles() { 
     return circles; 
    } 

} 

... 

field.getShapes(n).draw(); // for both Circle and Rectangle available 

int radius = field.getCircles(m).getRadius()); // for Circle only 
相關問題