java强制一个基于实例变量的方法参数对象类型

时间:2013-06-20 02:23:22

标签: 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 {}

我可以使用MyObject实例化Customer.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 Relationship对象。我用基础Model实例和目标类实例化对象。例如,我正在创建一个HasMany关系对象。我将使用Customer实例和Document类来实例化该对象。在我的HashMany对象中,我有.get()方法,该方法返回附加到Documents实例的所有Customer。我还有一个.attach(Model model)方法,我会在其中提供Document个实例,该方法会将Document模型附加到数据库中的Customer模型。我想强制.attach(Model model)方法只接受对象实例化的类中的模型。在这种情况下,Document类。

1 个答案:

答案 0 :(得分: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
    }
}