我可以根据方法实例变量强制编译错误吗?考虑下面的示例类。
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
类。
答案 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
}
}