Визначте таблицю констант, використовуючи масиви

У Java я хотів би створити якусь таблицю інформації з масивів констант final static . Я хотів би ініціалізувати їх під час декларації. Я спробував з масивом ArrayList , HashMap , але я не можу знайти синтаксис, який дозволяє мені написати щось подібне до цього.

public static final (something) names = {
        { "Albert Einstein", number_1, number_2 } ,
        { "Isaac Newton", number_3, number_4 } ,
        { "Pitagora", number_5, number_6 } ,
};

Як ви бачите, це масив масивів і створює еквівалент таблиці DB. Стовпці такого роду таблиці складаються з різних типів (хоча всі дані на першому місці завжди будуть рядками, у другому місці цілі числа і т. Д.)

Що я повинен поставити на місці (щось)?

0
Це лише приклади, у цьому випадку це буде масив триплетів, рядків, цілих чисел, цілих чисел. Не дуже важливо, як отримати доступ до інформації, а як легко ініціалізувати статичні кінцеві дані.
додано Автор Beppi's, джерело
Що таке number_1 та інші? І як ви хочете отримати доступ до інформації. Це важливий фактор для вирішення того, яка структура даних вам потрібна.
додано Автор Rohit Jain, джерело

6 Відповіді

Масиви являють собою список того ж типу даних. Тому

 { "Albert Einstein", number_1, number_2 }

не повинен бути масивом. Насправді, це не може бути нічим стандартним у Java, тому що це щось конкретно для вашої програми.

Зробіть якийсь клас

public class MyData {
    public final String name;
    public final int number1;
    public final int number2;

    public MyData(String name, int number1, int number2) {
        this.name = name;
        this.number1 = number1;
        this.number2 = number2;
    }
}

І декларуйте

public static final MyData[] names = new MyData[] {
    new MyData("Albert Einstein", number_1, number_2) ,
    new MyData("Isaac Newton", number_3, number_4),
    new MyData("Pitagora", number_5, number_6)
};
4
додано
Спасибі, це компактно і ясно, саме те, що я шукав :)
додано Автор Beppi's, джерело

Якщо ви не заперечуєте відсутність сильного набору тексту, тобто використанням Object , ви можете просто використовувати масив масиву Object.

Це компілює:

public static final Object [][] names = {
    { "Albert Einstein", number_1, number_2 } ,
    { "Isaac Newton", number_3, number_4 } ,
    { "Pitagora", number_5, number_6 } ,
};
1
додано
Так. Фактично, це точне дані використовується Hibernate (добре шанованою структурою стійкості) для представлення рядків даних з довільного запиту бази даних - тобто таблиці даних! Кожен рядок повертається як масив об'єкта (оскільки рамки не знають, які типи буде стовпцями), і є масив тих, хто створює "таблицю".
додано Автор Bohemian, джерело
О, це інше рішення, ще більш компактне, хоча, якби я добре зрозумів, я міг би додати і зовсім інший об'єкт, вірно? Наприклад, може бути {number_6, array, "Joe", number_7}
додано Автор Beppi's, джерело
Врешті-решт, вони повинні бути константами, тому я не заперечую про подвійні перевірки типів і т. Д. Це саме те, що мені потрібно.
додано Автор Beppi's, джерело

Видається, що ви шукаєте спеціальний клас:

public class Scientist {
    private String name;
    private int numInventions;
    private int numStudents;
    public Scientist(String name, int numInventions, int numStudents) {
        this.name = name;
        this.numInventions = numInventions;
        this.numStudents = numStudents;
    }
    public String getName() {return name;}
    public int getNumInventions() {return numInventions;}
    public int getNumStudents() {return numStudents;}
}

Тепер ви можете ініціалізувати свій масив таким чином:

Scientist[] scientists = new Scientist[] {
    new Scientist("Albert Einstein", number_1, number_2),
    new Scientist("Isaac Newton", number_3, number_4),
    new Scientist("Pitagora", number_5, number_6)
};
1
додано
Я завжди забуваю, як Java є космічним трафіком :) Ймовірно, так, це рішення, а інший майже ідентичний - правильний вибір, дякую.
додано Автор Beppi's, джерело
Так, ясність - це ще одне обличчя монети "простора".
додано Автор Beppi's, джерело
@ Beppi Я віддаю перевагу слово "ясність" над "космічним витрачанням", але так, у вас ідея правильна :)
додано Автор dasblinkenlight, джерело

Спробуй

 public static final String[][] names = { namesarray1, namesarray2 };
0
додано
@ Beppi оновив мій пост.
додано Автор ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ, джерело
На жаль, як ви бачите, це масив масивів, а внутрішній масив повинен містити різні типи даних.
додано Автор Beppi's, джерело

1) Інкапсуліровать. Створіть Class , який об'єднує набір атрибутів (ім'я та пов'язані з ним атрибути)

2) Створіть масив [] або Collection (використовуйте підклас) для зберігання значень (примірників) цього класу

0
додано
Ви зробите мені приклад? Чи можу я ініціалізувати його безпосередньо під час декларації?
додано Автор Beppi's, джерело

Ймовірно, краще це зробити в initialiser static , наприклад.

public static final List names;

static {
    names = new List();
   //init here below using .add()
    names.add(Something);//something would contain the 3 fields you're grouping together
}
0
додано
Так, це рішення, але я шукав щось більш компактне та чітке :)
додано Автор Beppi's, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників