gpt4 book ai didi

java - 当 MySubClass 扩展 MyClass 时使用在 MyClass 中返回 MyClass 对象的方法

转载 作者:行者123 更新时间:2023-11-30 08:30:23 24 4
gpt4 key购买 nike

我在对一个非常简单的类进行子类化时遇到问题,该类也有返回初始类的方法。

public class MyClass {

public MyClass(){
}

public MyClass filterOn(String something){
MyClass result=new MyClass();
result.doSomethingUsingThisInstance(this, something);

return result;
}

}


public class MySubClass extends MyClass{
....
}

好的,现在如果我想这样调用:

  MySubClass subClass=new MySubClass();
MySubClass subClass2=(MySubClass)subClass.filterOn("Hello World");

然后我有一个java.lang.ClassCastException:cannot cast MyClass to MySubClass

如何防止这种情况?

最佳答案

覆盖 filterOn() 方法以在 MySubClass 中创建您想要的实例:

 public class MySubClass extends MyClass{

public MyClass filterOn(String something){
MySubClass result = new MySubClass();
result.doSomethingUsingThisInstance(this, something);
return result;
}
....
}

您还可以通过在 MyClass 中引入一个方法来创建我们在子类中覆盖的当前类的实例,从而避免 filterOn() 方法中的重复:

public class MyClass {

public MyClass(){
}

public MyClass createSpecificInstance() {
return new MyClass();
}

public MyClass filterOn(String something){
MyClass result = createSpecificInstance();
result.doSomethingUsingThisInstance(this, something);

return result;
}

}

现在子类只覆盖 createSpecificInstance() :

public class MySubClass  extends MyClass {

public MyClass createSpecificInstance() {
return new MySubClass();
}

}

关于java - 当 MySubClass 扩展 MyClass 时使用在 MyClass 中返回 MyClass 对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41240080/

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