gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:54:23 27 4
gpt4 key购买 nike

我目前正在使用一个接受类型对象的构造函数然后我根据 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com