【问题标题】:java; initialize object and passing object爪哇;初始化对象并传递对象
【发布时间】:2012-11-26 04:10:38
【问题描述】:
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() 方法可以调用来创建一个用特定给定数组初始化的哈哈对象。

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

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

} 

【问题讨论】:

  • 接口B是什么?它与问题相关吗?
  • 你确定你的任务不是对给定的数组进行排序吗?
  • @Bohemian B b1 = new haha​​(); // BTester 类内部
  • @Perception 对不起。我不明白你的问题。对给定的数组进行就地排序??

标签: java initialization


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

【讨论】:

  • 感谢您的回复!我在这里有点困惑。不是哈哈 haha​​ = new 哈哈(a);应该在私人里面说明哈哈(??) ??
  • 因为“..定义了一个私有构造函数,静态 sort() 方法可以调用它来创建一个用特定给定数组初始化的哈哈对象”
  • 这个要求是谁写的?您不能从静态方法中访问类的私有方法,除非私有方法本身是静态的。
  • 正如你所写,在 static sort() { 哈哈 haha​​ = new 哈哈(a);} 内部我尝试了 private 哈哈(E[] b) { System .out.print(b[0]);}。它实际上打印出“1”
猜你喜欢
  • 2011-01-07
  • 2014-05-24
  • 2011-09-24
  • 1970-01-01
  • 2021-03-02
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多