gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:20:18 25 4
gpt4 key购买 nike

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

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 {}

我可以使用 Customer.class 实例化 MyObject 吗?然后如果我调用 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() 方法,它返回附加到 Customer 实例的所有 Documents 。我还有一个 .attach(Model model) 方法,我将向其提供一个 Document 实例,该方法会将 Document 模型附加到数据库中的Customer 模型。我想强制 .attach(Model model) 方法仅接受实例化对象的类中的模型。在本例中,为 Document 类。

最佳答案

听起来您应该创建该类 - 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
}
}

关于java强制基于实例变量的方法参数对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17204348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com