2016-03-03 42 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)',它不那么“友好”。 –