我目前正在使用一个接受类型对象的构造函数 然后我根据 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();
}
CusClass1
和 CusClass2
是否具有相同的 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/