Java - доступ к глобальным переменным и массивам - PullRequest
1 голос
/ 15 декабря 2010

У меня простой вопрос о том, как получить доступ к глобальным переменным и информации о глобальных массивах, но мне не повезло.

У меня есть два файла Java, но я не могу получить доступ к информации о строках и массивах в моем приложенииOptrader.java.

  1. Optrader.java
  2. OptraderGlobals

Мой файл OptraderGlobal.java:

 class OptraderGlobal
 {
    String[] columnNames
           = {"Ex-Date",
              "Dividend",
              "Actual",
              "Yield (%)"
             };

  Object[][] data  = {
       {"dd/mm/yyyy", new Double(5), new Boolean(false), 
          {"21/12/2013", new Double(5), new Boolean(false)};
       }
}

Мой Optrader.Java-файл:

/* Volatility Table Model is  CLASS within Optrader.java */
//Create Volatility Table
class VolatilityTableModel extends AbstractTableModel
{
   public int getColumnCount()
   {
         return OptraderGlobal.columnNames1.length;
    }   
 }

ошибка:

 non-static variable columnNames cannot be
 referenced from a static context
 return OptraderGlobal.columnNames.length;

Также мне нужно получить доступ к данным глобального массива в других классах в Optrader.java.

Ответы [ 5 ]

0 голосов
/ 15 декабря 2010

Вы должны узнать больше о полях-членах в Java .

В вашем случае, если вы хотите, чтобы они были просто доступны из других классов без создания экземпляра OptTraderGlobal, вы должны сделать columnNames и data static.

0 голосов
/ 15 декабря 2010

Вам нужно объявить их как public static, чтобы получить к ним доступ так, как вы хотите.

public static String[] columnNames
           = {"Ex-Date",
              "Dividend",
              "Actual",
              "Yield (%)"
             };

public static Object[][] data  = {
       {"dd/mm/yyyy", new Double(5), new Boolean(false), 
                 {"21/12/2013", new Double(5), new Boolean(false)};
                     }

Вы должны также объявить классы как публичные.

0 голосов
/ 15 декабря 2010

Сделать имя столбца статическим.

0 голосов
/ 15 декабря 2010

Если вы хотите, чтобы что-то было глобальным для класса, вам нужно объявить это как static. Это означает, что поле связано с самим классом (только одна копия), а не с новой версией, создаваемой для каждого экземпляра.

Поскольку в настоящее время вы этого не делали, в результате вы получили ошибку, скопированную в вашу VolatilityTableModel - вы не можете ссылаться на поле без некоторого конкретного экземпляра OptraderGlobal.

Я бы посоветовал вам взглянуть на некоторые ресурсы, связанные с Объектно-ориентированным программированием - и эта ошибка, и ваш дизайн в целом (т. Е. Глобальные переменные, как правило, являются плохой идеей) указывают на отсутствие знакомства с этими принципами. Поскольку Java является объектно-ориентированным языком, знакомство с этим стилем поможет вам без конца.

0 голосов
/ 15 декабря 2010

Если вы хотите, чтобы поля были глобальными, вам нужно объявить их статическими:

static String[] columnNames = ...

static Object[][] data = ...

Без ключевого слова static поля принадлежат экземплярам из OptraderGlobalа не самому классу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...