java的;初始化对象和传递对象

时间:2012-11-26 04:10:39

标签: java initialization

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);
    }
}

我想定义一个私有构造函数static sort()方法可以调用创建一个用特定给定数组初始化的Haha对象。

但它必须对其参数数组进行排序而不分配另一个数组,因为公共构造函数已经在分配另一个数组。

问题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.

} 

1 个答案:

答案 0 :(得分: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;
    }
}

但为了实现这一目标,您需要使用备用构造函数 public 。这是因为您尝试从静态方法访问它,这实际上与尝试从完全不同的类访问它一样。