您如何在Java中调用泛型类型的方法?

迈克尔·特蕾西(Michael Tracey):

我正在尝试制作一种方法,该方法将可变对象类型作为参数,然后根据传递的对象来更新数据库,这有点像Petapoco如何为C#工作。为此,我尝试使用一种通用方法,在该方法中,传递的对象在插入/更新到相关表之前会通过许多检查。关于Stack Overflow的许多问题使我倾向于使用这样的方法签名:

public <T> void upsertObject(Class<T> objectClass, T actualObject) { }

在方法中,我希望能够调用类似actualObject.getId()方法,但是编译器需要知道对象的实际类型才能调用其相关方法。有没有办法解决?我将如何实现这些电话?

编辑:

编辑更清晰

添加用于绑定T的接口后,我发现出现错误:

“无法从CycleComponent类型静态引用非静态方法getId()”

该方法现在看起来像这样,错误行在T.getId()下

public <T extends CycleComponent> void upsertObject(Class<T> objectClass, T fitProObject) {
    if (objectClass.getName() == "Cycle") {
        if (isInserted(T.getId(), "Cycles")) {
            // update the database
        }else {
            // insert into the database
        }
    }

}

界面如下:

public interface CycleComponent {

    String getId();

}

而且Cycle类中的方法如下所示:

public String getId() {
    return this.cycleId;
}
他们是 :

您可以使用通用类型范围来实现。

定义:

public <T extends SomeType> void upsertObject(Class<T> objectClass, T actualObject) { }

SomeType类或接口在哪里,您将可以SomeTypeactualObject实例调用方法

这会将这种方法限制为只能与扩展SomeType(如果是类)或实现SomeType(如果是接口)的类型一起使用。

例如:

public interface SomeType {
    String getId();
}

和:

public <T extends SomeType> void upsertObject(Class<T> objectClass, T actualObject) {
    if (actualObject.getId() != null) {
       ...
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Java中,如何在泛型类型的实例上调用getClass时避免原始类型?

如何在泛型约束类型上调用静态方法

Java泛型-从泛型类型的方法调用特定方法

如何在泛型方法中获取具体类型

如何在使用泛型的方法中返回不同的类型?

如何在泛型方法中引用类型参数的值

如何在Java中实例化泛型类型?

如何在Java中动态声明实例的泛型类型

如何在Java中推断泛型类型?

如何在 Clojure 中创建泛型类型的 Java 对象?

如何在Java的子类中更改泛型类型

构建器模式 Java:如何在 BaseBuilder 中为泛型 BaseClass 引用泛型类型

Java 7泛型:如何访问泛型类型的方法?

java泛型-如何在知道子类类型和超类的情况下调用子重载方法

Java中的泛型防止方法的调用

接口方法Java中的泛型类型

如何在Java中实现泛型方法

如何在Java中的方法内部使用泛型T?

如何在不指定类型的情况下在泛型类上调用静态方法?

您如何处理Java中的“超级”泛型?

您如何在Java中从超类调用子类方法?

如何在TypeScript中为特定类型的泛型类型创建扩展方法

如何在 Roslyn 中检查方法参数类型/返回类型是否为泛型?

Java使用泛型类型参数确定要调用的方法?

Rust 与 Java 静态方法以及调用泛型类型参数

调用泛型方法时如何推断参数类型?

为什么Java泛型类型的推理在链式方法调用中中断?

可选的泛型类型在方法调用中不接受nil

如何在JAVA泛型中定义使用2个泛型参数扩展Map对象的类型?