Java - Traitement des variables globales et des tableaux


J'ai une question simple sur la façon d'accéder aux variables globales et aux informations de tableau global que je n'ai pas eu de chance.

J'ai deux fichiers Java, mais je ne peux pas accéder aux informations de chaîne et de tableau dans mon application Optrader.java.

  1. Optrader.java
  2. OptraderGlobals

Mon OptraderGlobal.fichier 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)};
       }
}

Mon Optrader.fichier java:

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

Erreur:

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

J'ai également besoin d'accéder aux données du tableau global dans d'autres classes dans Optrader.Java.

Author: user unknown, 2010-12-15

5 answers

Si vous voulez que les champs soient globaux, vous devez les déclarer statiques:

static String[] columnNames = ...

static Object[][] data = ...

Sans les static clé, les champs appartiennent à instances de OptraderGlobal et non pas à la classe elle-même.

 0
Author: cdhowie, 2010-12-15 15:57:44

Rendre les noms de colonnes statiques.

 0
Author: PaulJWilliams, 2010-12-15 15:57:53

Si vous voulez quelque chose d'être mondial, à une classe, vous devez le déclarer comme static. Cela signifie que le champ est associé à la classe elle-même (une seule copie), plutôt qu'une nouvelle version créée pour chaque instance.

Puisque vous ne l'avez pas fait pour le moment, vous vous êtes retrouvé avec l'erreur copiée dans votre VolatilityTableModel - vous ne pouvez pas référencer le champ sans une instance particulière d'OptraderGlobal.

Je vous suggère de jeter un œil à certaines ressources traiter de Programmation orientée objet - cette erreur et votre conception dans son ensemble (c'est-à-dire que les globales sont généralement une mauvaise idée) indiquent peut-être un manque de familiarité avec ces principes. Étant donné que Java est un langage orienté objet, se familiariser avec ce style vous aidera sans fin.

 0
Author: Andrzej Doyle, 2010-12-15 15:58:11

Vous devez les déclarer comme public static pour y accéder comme vous le souhaitez.

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)};
                     }

Vous devez également déclarer les classes comme publiques.

 0
Author: jjnguy, 2010-12-15 15:58:46

Vous devez en savoir plus sur champs membres en Java.

Dans votre cas, si vous voulez qu'ils soient simplement accessibles à partir d'autres classes sans créer une instance de OptTraderGlobal, vous devez faire columnNames et data static.

 0
Author: wkl, 2010-12-15 15:59:01