6

パブリックコンストラクターとプライベートコンストラクターが必要なシナリオに出くわしました。型がプライベート 内部クラスであるプライベート フィールドを設定するには、プライベート コンストラクターが必要です。これは奨励されていますか、それとも落胆していますか?それ以外の場合、以下にリストされているシナリオのより良い解決策は何ですか?

私の質問をより有意義にサポートするコメントを読んでください。ありがとう、

public class CopyTree { 
    private TreeNode root;

    public Copytree() { }

    //  private CopyTree(TreeNode root) { this.root = root; }

    private static class TreeNode {
       TreeNode left;
        TreeNode right;
        Integer element;
        TreeNode(TreeNode left, TreeNode right, Integer element) {
            this.left = left;
            this.right = right;
            this.element = element;
    }
}

public CopyTree copyTree() {
    CopyTree ct = new CopyTree();
    ct.root = copyTree(root);  // <---- QUESTION:  Any cleaner solution ?? 
    // cleaner solution appears to be a private constructor
    // eg: CopyTree ct = new CopyTree(copyTree(root));  But can public and private constructor     coexist together ?
    return ct;
}

private TreeNode copyTree(TreeNode binaryTree) {
    TreeNode copy = null;
    if (binaryTree != null) {
        copy = new TreeNode(null, null, binaryTree.element);
        copy.left =  copyTree(binaryTree.left); 
        copy.right = copyTree(binaryTree.right);
    }
    return copy;
}
4

4 に答える 4

0

次の方法でのみ、プライベート コンストラクターとパブリック コンストラクターの両方を使用できます。ただし、引数コンストラクターがない場合や同じ引数の型に両方を使用することはできません。

public class MyClass {
private MyClass(){

}
public MyClass(int i){

}
}
于 2013-07-08T05:40:31.973 に答える
0

コメントアウトされたコードから判断すると、すでに試してみて、うまくいきました。したがって、私はあなたの発見を確認することしかできません: はい、プライベート コンストラクターはパブリック コンストラクターと共存できます。はい、新しいオブジェクトへの参照を受け取る前により多くの初期化が行われるため、より良い解決策のようです。

于 2013-07-08T05:41:40.030 に答える