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

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

我可以使用 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/

相关文章:

java - ChromeDriver服务: Builder cannot be resolved

java - 用 Java 中的抽象类扩展 ArrayList?

java - 无法与Electron一起安装NPM软件包 “java”

java - 将数组初始值设定项直接传递给方法参数不起作用

java - 如何优化从平面文件到 BD PostgreSQL 的数据导入?

java - 如何使用Javamail发送简单的Email?

java - 静态方法不能运行其他方法吗?

java - jQuery ajax 无法从 struts2 操作中获得响应

java - wsdl 绑定(bind)未定义

java - 如何更新 Maven POM 中的版本号