gpt4 book ai didi

java - 如何使用Java中子类的Class实例对象将对象转换为其自身的子类?

转载 作者:行者123 更新时间:2023-12-02 13:21:46 26 4
gpt4 key购买 nike

假设我有一个抽象类 AbstractFragment,它有一个父类(super class) Fragment:

public abstract class AbstractFragment extends Fragment {
public abstract updateData();



public static <FragmentClass extends AbstractFragment>
ChartClass newInstance(int condition, Class<ChartClass> chartFragmentClass) {

Constructor<ChartClass> c = chartFragmentClass.getConstructor();

ChartClass fragment = c.newInstance();

Bundle args = new Bundle();

args.putInt("key", condition);
fragment.setArguments(args);

return fragment;
}

以及 AbstractFragment 类的两个子级:

public class FirstChildFragment extends AbstractFragment {
public updateData() {}
}

public class SecondChildFragment extends AbstractFragment {
public updateData() {}
}

在运行时,根据条件,我想根据条件将 Fragment 对象强制转换为第一个或第二个子对象之一,或者使用抽象类中的静态方法创建子对象的新实例(我已经弄清楚这个静态方法),就像这样:

void onDataLoaded(int condition) {

Fragment fragment = getChildFragmentManager()
.findFragmentById(R.id.fragment_container_dashboard_chart);

Class ChildFragmentClass;
if (condition == 0) ChildFragmentClass = FirstChildFragment.class;
else if (condition == 1) ChildFragmentClass = SecondChildFragment.class;
else throw new RuntimeException("Condition is invalid");

if (fragment.getClass().isInstance(ChildFragmentClass))
((ChildFragmentClass) fragment).updateData();
else {
ChildFragmentClass childFragment = ChildFragmentClass.newInstance(5, ChildFragmentClass);
}
}

上述代码中的问题是我不知道如何正确转换 fragment 对象,以便将其识别为 ChildFragmentClass 类的实例。随后,这意味着我尝试调用 newInstance 的代码也是正确的。如何将 fragment 正确地转换为 ChildFragmentClass 并能够调用适当的方法?我希望新实例是第一个或第二个子实例的实例。

最佳答案

ChildFragmentClass 不是一个类,它是一个局部变量。您应该创建一个新变量并分配它。

这可能有助于解决您的问题。

if (fragment.getClass().isInstance(AbstractFragment))
((AbstractFragment) fragment).updateData();
else {
Fragment childFragment = AbstractFragment.newInstance(5, ChildFragmentClass);
}

关于java - 如何使用Java中子类的Class实例对象将对象转换为其自身的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43544896/

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