0
Integer[] intArray = new Integer[] {1,2,3,4};
Haha.sort(intArray);


public class Haha<E extends Comparable<? super E>> implements B<E>
{
     private E[] array;

     public Haha()
     {
         array = (E[]) new Comparable[10];
     }

     private Haha( ??? )  
     {
         ???
     }


    public static <T extends Comparable<? super T>> void sort (T[] a)
    {
        Haha(a);
    }
}

特定の特定の配列で初期化された Haha オブジェクトを作成するために呼び出すことができるプライベート コンストラクター static sort() メソッドを定義したいと考えています。

ただし、パブリック コンストラクターが既に別の配列を割り当てているため、別の配列を割り当てずに引数配列を並べ替える必要があります。

問題 1) プライベート ハハは、どのようにして sort() メソッドから 'a' を受け取ることができますか?? 私が行った場合

private Haha(E[] b)  // gives error because of different type   T & E
{
    // skip    
}

私が行った場合

private Haha(T[] b) // gives error too because Haha is class of Haha<E>
{
   // skip
}

問題 2) 特定の配列でオブジェクトを初期化する方法

private Haha( ??? b )  // if  problem 1 is solved
{
     array = b; // is this right way of initializing array, not allocating?
                // It also gives error because sort() is static, but Haha is not.

} 
4

1 に答える 1

1

このクラスの全体的な設計に疑問があります。割り当ては単に配列を所定の位置に並べ替えることであるように思われるからです。ただし、静的メソッドで指定されたジェネリックパラメータータイプは、クラスシグネチャで定義されたものとは完全に異なることに注意してください。次の両方を使用できます。

public class Haha<E extends Comparable<? super E>> {
    public static <T extends Comparable<? super T>> void sort (T[] a) {
        // unusual, but can be done
        final Haha<T> haha = new Haha<T>(a);
    }

    private E[] array;

    public Haha() {
        this(new Comparable[10];
    }

    public Haha(final E[] array) {
        super();
        this.array = array;
    }
}

ただし、これを機能させるには、代替コンストラクターをパブリックにする必要があります。これは、静的メソッドからアクセスしようとしているためです。これは、まったく異なるクラスからアクセスしようとしているのと実質的に同じです。

于 2012-11-26T04:46:37.143 に答える