Java中可能有多种数据类型吗?

时间:2011-12-26 23:42:36

标签: java arrays

在我的函数中,为了接受一个值数组,我必须定义一个数据类型......

myFunc( String[] myVar ) {}

如果我想要一个像下面数组一样混合对象和字符串以及嵌套数组/的数组怎么办(注意:下面的数组在PHP中)

myFunc(array(
   array(
      'name' => 'Category1',
      'products' => array(
          array(
              productObject,
              productObject,
              ...
          )
      )
   )
));

这在Java中是否可行,或者这是一种完全错误的技术?

4 个答案:

答案 0 :(得分:1)

这是可能的(Object数组),但它仍然不是一个好的解决方案。

这听起来像是一个包含不同类型的数组,你真的想要创建一个新类。您在示例中为数组元素定义了名称,这表示您知道它们应该是什么类型。我的猜测是你要创建一个类,它包含名称的String和一个Products数组(另一个自定义类)。

答案 1 :(得分:1)

您需要在Java中使用面向对象的方法(也可以在PHP中使用)。您在上面列出的对象的类结构如下:

public class MyObject {
    String name;
    Product[] products;

    public MyObject(String name, Product[] products) {
        this.name = name;
        this.products = products;
    }
}

然后,您可以通过执行以下操作获取该类的实例:

new MyObject("Category1", new Product[] { productObject1, productObject2 });

您还可以拥有此对象类型的数组:

MyObject[] myObjs = {
    new MyObject("Category1", new Product[] { productObject1, productObject2 });
    new MyObject("Category2", new Product[] { productObject3, productObject4 });
    new MyObject("Category3", new Product[] { productObject5, productObject6 });
}

答案 2 :(得分:1)

大多数PHP代码不像C ++,C#,Java等更“传统”的OO语言中的代码那样强类型。因此,将PHP直接移植到Java的方法可能是错误的。

相反,尝试构建一个类来表示您的数据类型。从最里面的类型开始,在您的情况下似乎是“产品”。例如:

public class Product {
    private int id;
    private String name;

    public Product(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return this.id;
    }

    public String getName() {
        return this.name;
    }
}

现在您需要表示看似属于某类产品的内容,因此您可以创建另一个类来保存这些产品。例如:

public class ProductCategory {
    private String name;
    private List<Product> products;

    public ProductCategory(String name) {
        this.name = name;
        this.products = new ArrayList<Product>();
    }

    public String getName() {
        return this.name;
    }

    public List<Product> getProducts() {
        return this.products;
    }
}

要使用这些类,您可以编写如下代码:

Product p1 = new Product(1, "P1");
Product p2 = new Product(2, "P2");
Product p3 = new Product(3, "P3");

ProductCategory c1 = new ProductCategory("C1");

// Add product to category 1
c1.getProducts().add(p1);

ProductCategory c2 = new ProductCategory("C2");

// Add products to category 2
c2.getProducts().add(p2);
c2.getProducts().add(p3);

答案 3 :(得分:0)

您可以创建一个Object数组,这将很乐意采用多种数据类型。你必须要小心你如何使用它们 - 使用instanceof很方便,或者如果你确切知道你可以投射什么数据类型,而不需要先检查数据类型。使用多个数据类型数组被认为是不好的做法,尽管如果您的实现需要它,没有什么能阻止您这样做。