2012-04-13 77 views
4

我用java一個問題,當我試圖覆蓋一個方法,我的代碼如下:的Java方法重寫與參數「類<?擴展對象>」

public abstract class CustomAdapter{ 
    public abstract Boolean addItem(Class<? extends Object> aObject); 
} 

public class RainAdapter extends CustomAdapter { 
    @Override 
    public Boolean addItem(ClassOfRain aRainInfo) { 
     // do something 
    return true; 
    } 
} 

我可以聲明「類「到」ClassOfRain「? 如果是,該怎麼辦?

感謝您的閱讀!

+1

類<?擴展對象>沒有任何意義,因爲所有的Java類擴展對象... – MarioDS 2012-04-13 09:49:44

回答

5

我覺得你有點困惑。你確定你是不是想說:

public abstract class CustomAdapter<T extends Object> { 
    public abstract Boolean addItem(T aObject); 
} 

public class RainAdapter extends CustomAdapter<Rain> { 
    @Override 
    public Boolean addItem(Rain aRainInfo) { 
     // do something 
     return true; 
    } 
} 

在我的階級結構的解釋,你正試圖使通用addItem方法,所以繞過實際的類的對象是沒有用的。實現抽象/接口方法和/或覆蓋時

+0

謝謝你的回答! – 2012-04-13 09:58:41

0

這是不可能的。方法覆蓋意味着您放置完全相同的方法頭。唯一可以改變的是給定參數的名稱。

0

Class<Rain.class>將持有Rain類的反映。但這不起作用,因爲重寫的方法必須具有相同的形式參數,所以您必須使用Class<? extends Object>

0

方法簽名必須匹配...你可以做這樣的事情壽

public abstract class CustomAdapter{ 
    public abstract Boolean addItem(Object o); 
} 

public class RainAdapter extends CustomAdapter { 

    public Boolean addItem(Object o){ 
     if (o.getClassName().equals("ClassOfRain")){ 
      return this.addItem((ClassOfRain) o); 
     } 
     return false; 
    } 
    private Boolean addItem(ClassOfRain aRainInfo) { 
     // do something 
     return true; 
    } 
}