如何初始化自定义类对象的数组?

6

听起来很容易,但我已经尝试了相当长一段时间了,我想使用花括号初始化我的自定义类对象数组

这是失败的例子:

类:

class Tranforminfo{
        int left;
        int top;
        int right;
        int bottom;
        float rorate;

        public Tranforminfo(int left, int top, int right, int bottom, float rorate) {
            this.left = left;
            this.top = top;
            this.right = right;
            this.bottom = bottom;
            this.rorate = rorate;
        }
    }

用法:(不正确)

// attempt 1 
Tranforminfo somedamn = new Tranforminfo[]{(1,2,3,4,5),(6,4,3,5,6)};

// attempt 2
Tranforminfo somedamn = new Tranforminfo[]{{1,2,3,4,5},{6,4,3,5,6}};

// attempt 3
Tranforminfo somedamn = new Tranforminfo[]((1,2,3,4,5),(6,4,3,5,6));

目前还没有什么运气,需要帮助,我正在编写Android(JAVA)代码


尝试1是最接近的:Tranforminfo[] somedamn = new Tranforminfo[]{new Tranforminfo(1,2,3,4,5), new Tranforminfo(6,4,3,5,6)};。(但您也可以省略new Tranforminfo[])。 - Andy Turner
我必须为每个人都写新的吗?这很奇怪,C/C++应该允许这样做。 - Zulqurnain Jutt
Java和C/C++不是同一种语言,不要期望它们具有相同的功能。 - Andy Turner
请注意,类型为A[]的数组也可以包含A子类对象。您甚至可以创建一个以接口作为元素类型的数组(例如Runnable[])。虽然您可以争论说为您的情况提供一种简短的语法会很好,但它并不适用于一般情况。 - Mattias Buelens
这个问题在这里得到了很好的解答:https://dev59.com/mW435IYBdhLWcg3wiggk - Tunaki
显示剩余3条评论
2个回答

10

有几种方法可以做到这一点:

Transforminfo[] somedamn = 
    new Transforminfo[] { new Transforminfo(1,2,3,4,5),
                          new Transforminfo(6,4,3,5,6) };
Transforminfo[] somedamn = 
    { new Transforminfo(1,2,3,4,5), new Transforminfo(6,4,3,5,6) };  

首先,您需要创建Transforminfo数组链接,然后将新的Transforminfo元素添加到其中。

就像Integer []array = {1, 2, 3}一样,但是您必须使用构造函数来创建Transforminfo元素。

再举一个例子以理解对象数组的创建。 所有方法都是相等的。

String array[] = { new String("str1"), new String("str2") };
String[] array = { new String("str1"), new String("str2") };
String array[] = new String[] { new String("str1"), new String("str2") };
String[] array = new String[] { new String("str1"), new String("str2") };

字符串在这里作为示例确实是非常奇怪的。就像你的例子中的 ... { new String("str1"), ... 一样,它会在堆中创建一个新对象,但是 String[] array = { "str1", "str2" }; 则会使用 字符串常量池 - Arjan

3
Transforminfo[] somedamn = {new Transforminfo(1,2,3,4,5), new Transforminfo(1,2,3,4,5)};

Transforminfo[] 是一个指向 Transforminfo 数组的链接,使用 {...} 实际创建了数组(这是 Java 中的一种特殊语法,也是最短的一种)。

你所做的是:创建了一个指向 Transforminfo 对象的链接,并尝试将此链接设置到一个数组对象中。


再多解释一点也无妨。这个程序是做什么的,它是如何实现的? - Tunaki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接