Java - 在更多类中使用一个变量

Java - Using a variable in more clases

我必须变量 grid_sizegrid_subsize 和 classes SudokuGridSudokuGameSudokuSolverSudokuGenerator.

变量首先在 SudokuGrid 中启动,之后我需要在剩下的 classes 中使用它们。目前,我在 classes 的构造函数中传递参数之类的变量。类似于:

 public class Main extends Application {
    public static void main (String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Sudoku");

        int grid_size = 9;
        int grid_subsize = 3;
        SudokuGame sudokuGame = new SudokuGame(grid_size, grid_subsize);
    }
}
public class SudokuGame {

    public SudokuGame (int grid_size, int grid_subsize) {

        SudokuGrid sudokuGrid = new SudokuGrid(grid_size, grid_subsize);
    }
}

public class SudokuGrid {

    private int grid_size;
    private int grid_subsize;

    public SudokuGrid (int grid_size, int grid_subsize) {

        this.grid_size = grid_size;
        this.grid_subsize = grid_subsize;
    }
}

public class SudokuSolver {

    private int grid_size;
    private int grid_subsize;

    public SudokuSolver (int grid_size, int grid_subsize) {
        this.grid_size = grid_size;
        this.grid_subsize = grid_subsize;
    }
}

public class SudokuGenerator {

    private int grid_size;
    private int grid_subsize;

    public SudokuGenerator(int grid_size, int grid_subsize) {
        this.grid_size = grid_size;
        this.grid_subsize = grid_subsize;
    } 
}   

但看起来不太好。

我的第二个想法是像public静态变量一样使用它们,但是很多人说public静态变量是"EVIL"。

那么,在更多 class 中使用 one/more 变量的最佳方法是什么?

编辑:SudokuGame class public 静态方法中创建 grid_sizegrid_subsize(我不需要每次都创建一个新实例)。

你可以这样用,我看没问题。我没有看到此时使用静态变量有任何问题(我假设这些变量是常量),因为使用静态变量会使它成为所有 classes 中已知的全局变量,这就是你想要的这是静态的目的之一。由于 main 方法,人们大多称 static 为坏。在静态 main 方法中,您不能引用非静态方法,因此他们继续声明所有内容都是静态的。 static的意思是你不需要实例化一个Object来访问这个变量或方法。您始终可以通过调用 class 名称点变量或方法名称来访问它。


首先。请Post其他类.
其次,您必须为变量编写 getter 和 setter。

public int getGrid_size(){
 return grid-size;
}
private int getGrid_subsize(){
   return grid_subsizes;
}

是的,您不应该使用静态变量。但是,如果您愿意,您可以创建一个实用程序 Class,例如:

public class Utility{
    public static SudokuGenerator generator;
}

您可以通过以下方式访问变量:

int x = Utility.generator.getGrid_Size();

像下面这样发起一个class

public class gridSizes{
    public static int grid_size = 350;
    public static int grid_subsize = 30;
}

然后您可以随时通过gridSizes.grid_size或gridSizes.grid_subsize

检索该值

我的思路如下

  1. 我相信 classes SudokuGrid、SudokuSolver 和 SudokuGenerator 都是相互依存的。

  2. 那么为什么不将 SudokuGame 定义为外部 ClassSudokuGrid、SudokuSolver 和 SudokuGenerator 作为嵌套的 Inner Classes ,定义 私人整数 grid_size; 私人整数 grid_subsize; 在 SudokuGame class 中,然后根据需要访问内部 classes 中的两个变量。

  3. 也可以创建嵌套静态classes,但是嵌套静态classes只能访问外层class.[=10=的静态内容]

希望对您有所帮助。

我会使用带有 public 静态 Getters 的私有静态变量。

您的变量对于所有对象必须始终具有相同的值...这就是设计静态变量的目的。

如果你想在其他 classes 中使用 grid_size 和 grid_subsize 你需要定义你的变量 public,但是你不能使用不同的对象来访问grid_subsize 和 grid_size 的相同值如果你不想使用静态变量那么这是我的解决方案

这是你的publicclass

public class Whosebug {

public Whosebug(){
    SudokuGenerator a = new SudokuGenerator(1,2);
    newclass b= new newclass(a);
}
public static void main(String[] args) {
   new Whosebug();
}    
}

初始化变量后,您可以简单地将对象传递给任何其他 classes,这样您就可以获取相同的数据。

    class SudokuGenerator {
  public int grid_size;
  public int grid_subsize;

  public SudokuGenerator(int grid_size, int grid_subsize) {
    this.grid_size = grid_size;
    this.grid_subsize = grid_subsize;
   }  
 }

class newclass{
    public newclass(SudokuGenerator a){
        System.out.println("grid_size and grid_subsize in newclass " + a.grid_size + ", "+a.grid_subsize);
    }