java ;初始化对象并传递对象

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

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

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

问题1) private Haha 如何从 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.

} 

最佳答案

我质疑这个类的整体设计,因为在我看来,任务只是对数组进行排序。但是,请注意,静态方法中指定的泛型参数类型与类签名中定义的类型完全不同。您可以同时使用:

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)。这是因为您尝试从静态方法访问它,这实际上与尝试从完全不同的类访问它相同。

关于 java ;初始化对象并传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13558531/

相关文章:

java - 使用 RxJava/RxAndroid 依次执行不同类型的 Observable

c - 如何在 C 中的 strcpy() 之前循环初始化 char 数组并一次又一次地清空它?

ios - 如何从 AppDelegate 实例化多个 View Controller ?

c++ - 初始化非默认可构造元素的 std::array?

java - 从 Google AppEngine 切换到另一台服务器

java - 使用像素 int[] 创建 BufferedImage

java - 如何在堆积条形图中设置背景所有部分的颜色

java - 使用java处理希腊字符的问题

python - psycopg2 跨 python 文件

union 成员的 C++ 生命周期