2016-03-03 66 views
1

主要是我的問題是關於如何創建一個「動態」方法,我可以覆蓋不同的對象。關於接口的Java反思

因此,有這個接口

public interface GenericInterface{ 

    public List<Object> getAll() throws Exception; 

    public Object addObject(Object object) throws Exception; // This should use reflection 

} 

現在延長GenericInterface在這個其他接口

public interface CarInterface extends GenericInterface{ 

    @Override 
    List<Object> getAll() throws Exception; 

    @Override 
    public Object addObject(Object object) throws Exception; 


    public Object newSpecificMethod() throws Exception; 

} 

現在有一個公共類

pulic Car implements CarInterface{ 
    //... 

    @Override 
    public Object addObject(Object object) throws 

      //.. here some logic 

      return object; 
    } 

    //... 
} 

所以我怎麼會 「改寫」該方法的名字?

代替具有的

Car.addObject(對象);

我想有

Car.addCar((CAR)對象);

我知道這與Reflection有關,但我不知道該怎麼做。任何建議?

+0

在我看來,該子接口不必重寫兩個方法,它們是相同的。 –

+0

@grape_mao你是男人,過了一段時間我才意識到只能幫助我爲所有實體更快地編寫代碼,但沒有意義讓這個GenericInterface –

+0

嗯,這取決於我們可以保留一個通用接口。 JEY的答案是正確的,沒有必要重新聲明這兩種方法。 –

回答

2

使用通用:

public interface GenericInterface<T>{ 

    public List<T> getAll() throws Exception; 

    public T addObject(T object) throws Exception; 
} 

public interface CarInterface extends GenericInterface<T>{ 
    public Object newSpecificMethod() throws Exception; 
} 
+0

關於方法的名稱,它不能通過覆蓋更改。相反,OP可能希望將'addObject'名稱更改爲更通用的'add'。 – Vulcan

+0

使用強類型的方法,如果方法完全一樣,那麼這是沒有意義的 – JEY

+0

我最後得出結論,使用全局名稱比以前曾使用過的@Vulcan更好。所以最後我使用了'addItem(T item)'而不是'addObject(T object)',它不那麼「友好」。 –