1

我可以根据方法实例变量强制编译错误吗?考虑下面的示例类。

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

4

1 回答 1

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
    }
}
于 2013-06-20T02:38:04.770 回答