2013-06-20 79 views
1

我可以強制基於方法實例變量的編譯錯誤嗎?考慮下面的示例類。java強制基於實例變量的方法參數對象類型

class MyObject{ 

    Class targetClass; 

    public MyObject(Class<? extends Model> targetClass){ 
     this.targetClass = targetClass; 
    } 

    public <T extends Model> void doSomething(T model){ 
      //do some stuff 
    } 
} 

class Customer extends Model {} 

class Document extends Model {} 

難道我實例MyObjectCustomer.class,然後有它拋出一個編譯錯誤,如果我再調用doSomething()方法與Document.class實例?

MyObject object = new MyObject(Customer.class); 

//this shouldn't compile 
object.doSomething(new Document()); 

//this would be able to compile 
object.doSomething(new Customer()); 

編輯*

我試圖想出一個ORM的關係對象。我使用基本實例和目標類實例化對象。例如,我正在創建一個HasMany關係對象。我將用Customer實例和Document類實例化對象。在我的HashMany對象中,我有一個.get()方法,它返回連接到Customer實例的所有Documents。我也有一個.attach(Model model)方法,我會給它一個Document實例,該方法會將Document模型附加到數據庫中的Customer模型。我想強制.attach(Model model)方法只接受該對象實例化的類中的模型。在這種情況下,Document類。

+3

這聞起來像[在XY問題]的情況下(http://meta.stackexchange.com/questions/66377 /是什麼 - 是最XY-問題)。你究竟在努力完成什麼? –

+0

@MattBall,我編輯了我的OP,更多信息 – David

+1

爲什麼不是泛型? 'MyObject '? – 2013-06-20 02:37:01

回答

2

聽起來像是你應該使課堂 - MyObject,本身一般如下 -

class MyObject<T extends Model>{ 

    Class<T> targetClass; 

    public MyObject(Class<T> targetClass){ 
     this.targetClass = targetClass; 
    } 

    public void doSomething(T model){ 
      //do some stuff 
    } 
} 
+0

謝謝。這是我正在尋找的 – David

+0

不客氣。 –

+0

我怎麼能讓MyObject抽象?我想使'doSomething(T模型)'抽象,但我無法弄清楚如何在一個子類中實現它,而不會發生編譯錯誤 – David

相關問題