java - 将多种类型的对象作为参数传递给方法

标签 java

从 Java 7 开始,我们可以在同一个 catch 子句中捕获多个异常,如下所示。

try { 
  ...
} catch( IOException | SQLException ex ) { 
  ...
}

同样,有没有办法在不使用继承的情况下实现如下所示?

public void passMultipleTypes(Type1 | Type2 obj) {
  ...
}

obj 对象可以是 Type1Type2我不想在这里使用继承,因为这些类是生成的,我无法更改它们。所以我不能将它们定义为

public class Test1 extends CommonSuperClass {
  ...
}

Type1Type2 具有相似的属性。所以我正在考虑像下面这样使用 obj

public void passMultipleTypes(Type1 | Type2 obj) {
  System.out.println(obj.getCode());
  System.out.println(obj.getValue());
}

最佳答案

因为类是作为某些代码生成插件的一部分生成的。

您可以使用组合和继承来解决此问题。

为 Type1 和 Type2 编写扩展至公共(public)接口(interface)的包装类。

这将提供代码可重用性,并充当应用程序代码和第 3 方 API 之间的层。

public class Testing {

    public static void main(String[] args) {

        Processor processor = new Processor();
        processor.passMultipleTypes(new Type1Wraper());
        processor.passMultipleTypes(new Type2Wrapper());

    }

}

interface BasicType {

    void operationOne();

    void operationTwo();

}

class Type1 {
}

class Type2 {
}

class Type1Wraper implements BasicType {

    private Type1 type;

    @Override
    public void operationOne() {

        // type 1 method

    }

    @Override
    public void operationTwo() {

        // type 1 method

    }

}

class Type2Wrapper implements BasicType {

    private Type2 type;

    @Override
    public void operationOne() {

        // type 2 method

    }

    @Override
    public void operationTwo() {

        // type 2 method

    }

}

class Processor {

    public void passMultipleTypes(BasicType object) {

        object.operationOne();
        object.operationTwo();

    }

关于java - 将多种类型的对象作为参数传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39610690/

相关文章:

java - 方法是否可以知道调用它的对象的类型(即调用它的子类型)

java - 同一节点上两个同时的 RotationTransition

java - 如何打包java项目?

java - 像 JavaScript 一样覆盖对象的方法

java - 在 Java 中实现 Matlab 的 rgb2gray

javascript - 将变量从 JavaScript 发送到 Java

java - 如何在单元测试执行之前实例化 session ,以便服务类中的 Autowiring session 正确创建 bean?

java - GetResource 方法在 java 11 中不起作用

java - BPEL 和 selectionFailure 错误

java - 使用 Eclipse 的 java 定时器