【问题标题】:Create a class in java that can receive different types在java中创建一个可以接收不同类型的类
【发布时间】:2014-06-12 01:34:40
【问题描述】:

我想实现这个类来接收不同类型的数组,比如String、int、double等:

public class BubbleSort<T extends Comparable<T>> {

private T [] A;
public BubbleSort(T [] A) {
    this.A = A;
}

public void bubbleSort() {
    for (int i = 0; i < this.A.length; i++) {
        for (int j = 0; j < this.A.length - 1; j--) {
            if (this.A[j].compareTo(this.A[j - 1]) < 0) {
                T aux = this.A[j];
                this.A[j] = this.A[j - 1];
                this.A[j - 1] = aux;
            }
        }
    }
}

但是当我像这样创建该类的对象时:

double A[] = { 3, 2, 4, 6, 7, 1, 2, 3 };    
BubbleSort bs = new BubbleSort(A);

我收到一个错误,告诉我 BubbleSort(double[]) 的构造函数未定义。我认为我在泛型类型类上做错了,我需要一些帮助。

肿块。

【问题讨论】:

  • 另外,泛型不适用于原始类型。
  • @SotiriosDelimanolis 你提到的帖子不要回答我的问题
  • 你为什么这么认为?你知道现在什么是原始类型吗?你明白它如何适用于你的情况吗?
  • @SotiriosDelimanolis 所以我想做什么是不可能的?
  • 您可以使用Double[]

标签: java bubble-sort


【解决方案1】:

您需要参数化BubbleSort并且使用引用类型的数组,而不是原始类型(因为泛型仅适用于引用类型):

Double[] A = { 3d, 2d, 4d, 6d, 7d, 1d, 2d, 3d };    // notice Double ref. type
BubbleSort<Double> bs = new BubbleSort<Double>(A);  // notice <Double> type param.

还请注意,我已将[] 附加到数组的类型,即Double。像您所做的那样将它附加到变量名也是有效的,但将它附加到类型更常规。

【讨论】:

  • 非常感谢......它按我的预期工作。谢谢。
  • 我还发现将[] 附加到数组类型时更容易读取数据类型。您可以立即知道该变量是给定类型的数组。我不知道为什么 Java 允许将 [] 附加到变量名。 Double ADouble A[] 之间的区别令人困惑。
  • 如果您需要转换原始数组(如果您收到原始数组并且您无法控制更改发送方逻辑以发送引用类型数组),请查看在这个问题上:Cast primitive type array into object array in java
猜你喜欢
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多