Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确保从静态方法新实例在活动中创建片段_Java_Android_Android Fragments_Software Design - Fatal编程技术网

Java 如何确保从静态方法新实例在活动中创建片段

Java 如何确保从静态方法新实例在活动中创建片段,java,android,android-fragments,software-design,Java,Android,Android Fragments,Software Design,我正在设计一个片段供其他开发人员使用。 片段必须有一个公共构造函数,android SDK在创建片段时使用该构造函数,但要将数据从活动传递到片段,最好创建一个静态方法,在片段类中创建片段,如下所示 公共静态FaceMatchingResultFragment newInstance(布尔匹配,字符串参数2){ FaceMatchingResultFragment=新的FaceMatchingResultFragment(); Bundle args=新Bundle(); args.putBool

我正在设计一个片段供其他开发人员使用。 片段必须有一个公共构造函数,android SDK在创建片段时使用该构造函数,但要将数据从活动传递到片段,最好创建一个静态方法,在片段类中创建片段,如下所示

公共静态FaceMatchingResultFragment newInstance(布尔匹配,字符串参数2){
FaceMatchingResultFragment=新的FaceMatchingResultFragment();
Bundle args=新Bundle();
args.putBoolean(ARG_参数1,匹配);
args.putString(ARG_PARAM2,PARAM2);
fragment.setArguments(args);
返回片段;
}

我的问题是,有没有一种方法可以确保开发人员必须使用此方法而不是公共构造函数?

onCreate
过程中检查参数包是否包含是最干净的方法,这样做不会影响反射。如果要在访问无参数构造函数时显示内联错误,可以使用
RestrictTo
注释:

public class SimpleArgFragment extends Fragment {
    public static SimpleArgFragment newInstance(boolean val) {
        Bundle args = new Bundle();
        args.putBoolean("param", val);
        SimpleArgFragment f = new SimpleArgFragment();
        f.setArguments(args);
        return f;
    }

    @androidx.annotation.RestrictTo({RestrictTo.Scope.SUBCLASSES})
    public SimpleArgFragment() {
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getArguments() == null)
            throw new IllegalArgumentException("Missing arguments - use newInstance() to create.");
    }
}

有没有办法确保开发人员必须使用此方法而不是公共构造函数不编辑您可以在onCreate中确保片段包含所有需要的参数-在另一种情况下,您可以抛出一些有意义的异常make constructor priate.@caisil他不能-片段需要有一个无参数的公共构造函数override public constructor,并让它抛出一个异常和一条提示开发人员使用静态构造函数的消息1instead@NikosHidalgo当系统自动为该
限制重新创建Fragmentupvote时,将抛出它,这非常有用,谢谢