java - 一种获取多种类型的方法

标签 java constructor variable-assignment

我目前正在使用一个接受类型对象的构造函数 然后我根据 instanceof 测试它的类型

Public MyClass (Object obj)
{
if(obj instanceof CusClass1){
CusClass1 myObject = (CusClass1) obj;
globalVar1 = myObject.getAttrib1();
globaVar2 = myObject.getAttrib2();
}
if(obj instanceof CusClass2){
CusClass2 myObject = (CusClass2) obj;
globalVar1 = myObject.getAttrib1();
globaVar2 = myObject.getAttrib2();
}
}

这可以偏移到从构造函数中调用的 initalise 方法吗?主要问题在于对象的转换。我一直认为重复的代码是错误的代码。这可以做得更优雅吗?

最佳答案

更好、更类型安全的设计是创建多个重载构造函数。然后您将不需要任何强制转换,并且您将无法通过向对象传递不适当类型的对象来构造对象。

public MyClass(CusClass1 myObject) {
    globalVar1 = myObject.getAttrib1();
    globalVar2 = myObject.getAttrib2();
}

public MyClass(CusClass2 myObject) {
    globalVar1 = myObject.getAttrib1();
    globalVar2 = myObject.getAttrib2();
}

CusClass1CusClass2 是否具有相同的 getAttrib1()getAttrib2() 方法?然后考虑创建一个这两个类都实现的接口(interface),并创建一个构造函数,该构造函数采用实现该接口(interface)的对象:

public interface Attribs {
    String getAttrib1();
    int getAttrib2();
}

public class CusClass1 implements Attribs {
    // ...
}

public class CusClass2 implements Attribs {
    // ...
}

public class MyClass {
    // You can now pass anything that implements interface Attribs
    public MyClass(Attribs myObject) {
        globalVar1 = myObject.getAttrib1();
        globalVar2 = myObject.getAttrib2();
    }
}

关于java - 一种获取多种类型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7189132/

相关文章:

java - 如何在java中将图像裁剪成圆形?

java - Android独特的动态添加按钮上的点击事件

java - 类的构造函数不创建类

c++ - 如何使用类对象上的指针在类中定义复制构造函数和 = 运算符重写?

c++ - C++ 中的复制构造函数和 = 运算符重载 : is a common function possible?

java - 如何在Eclipse中查看Java提供的类

java - 类型转换和泛型,有什么性能差异?

JAVA:请帮助我使用compareTo对象

c++在第一类的构造函数中创建第二类的对象 - 多线程

python - 基本 Numpy 数组值赋值