从 Java 7 开始,我们可以在同一个 catch 子句中捕获多个异常,如下所示。
try {
...
} catch( IOException | SQLException ex ) {
...
}
同样,有没有办法在不使用继承的情况下实现如下所示?
public void passMultipleTypes(Type1 | Type2 obj) {
...
}
obj
对象可以是 Type1
或 Type2
。 我不想在这里使用继承,因为这些类是生成的,我无法更改它们。所以我不能将它们定义为
public class Test1 extends CommonSuperClass {
...
}
Type1
和 Type2
具有相似的属性。所以我正在考虑像下面这样使用 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/