Java 如何将我的对象传递给另一个类

Java 如何将我的对象传递给另一个类,java,casting,Java,Casting,我读过几篇关于传递值如何工作的文章,但我不能从case语句调用序列化方法,因为我没有正确地传递“club”变量。我知道它超出了我的“MainMenu”类的范围,但我不知道将它传递给我的“MainMenu”类的语法 我想把它传递给我的“MainMenu”构造函数,我已经尝试过了,但是我需要将类型从对象转换为字符串,我正在努力解决这个问题 如何阻止“俱乐部”显示“找不到符号”?这发生在我的序列化case语句中 这是我的堆栈跟踪,我还包括了最相关的代码片段 MainMenu.java:19: erro

我读过几篇关于传递值如何工作的文章,但我不能从case语句调用序列化方法,因为我没有正确地传递“club”变量。我知道它超出了我的“MainMenu”类的范围,但我不知道将它传递给我的“MainMenu”类的语法

我想把它传递给我的“MainMenu”构造函数,我已经尝试过了,但是我需要将类型从对象转换为字符串,我正在努力解决这个问题

如何阻止“俱乐部”显示“找不到符号”?这发生在我的序列化case语句中

这是我的堆栈跟踪,我还包括了最相关的代码片段

MainMenu.java:19: error: cannot find symbol                                                                                                                          
    MainMenu team = new MainMenu(club);                                                                                                                              
                                 ^                                                                                                                                   
  symbol:   variable club                                                                                                                                            
  location: class MainMenu  
MainMenu.java:49: error: cannot find symbol                                                                                                                          
    saveclub1.Serialize(club , club_one);                                                                                                                            
                        ^                                                                                                                                            
  symbol:   variable club                                                                                                                                            
  location: class MainMenu                                                                                                                                           
MainMenu.java:49: error: cannot find symbol                                                                                                                          
    saveclub1.Serialize(club , club_one);                                                                                                                            
                               ^                                                                                                                                     
  symbol:   variable club_one                                                                                                                                        
  location: class MainMenu                                                                                                                                           
MainMenu.java:72: error: cannot find symbol                                                                                                                          
    saveclub2.Serialize(club , club_one);                                                                                                                            
                        ^                                                                                                                                            
  symbol:   variable club                                                                                                                                            
  location: class MainMenu                                                                                                                                           
MainMenu.java:72: error: cannot find symbol                                                                                                                          
    saveclub2.Serialize(club , club_one);  
symbol:   variable club_one                                                                                                                                        
  location: class MainMenu                                                                                                                                           
5 errors           

MainMenu.java代码段

String[] clubName = {"Arsenal","Aston Villa", "Bournemouth", "Chelsea", "Crystal Palace", "Everton", "Leicester City", "Liverpool", "Manchester United", "Manchester City", "Newcastle United", "Norwich City", "Southampton", "Stoke City", "Sunderland", "Swansea City", "Tottenham Hotspur", "Watford", "West Brom", "West Ham United"};

    String[] Menu = {"Choose Team", "Create Profile","Load Game", "Credits" ,    "Quit" , "Save Game" , "League Table"};

    public MainMenu(ClubInfo club){

    // clubName = club; // cast object club, to make it a String e.g clubName?
        //constructor
        }

    public static void main(String args[]){

        MainMenu team = new MainMenu(club);

    }

来自MainMenu.java的更多信息

case 2: 
    Serialize saveclub1 = new Serialize();
    saveclub1.Serialize(club , club_one);
    exit = true;    
    break;

case 6:
    Serialize saveclub2 = new Serialize();
    saveclub2.Serialize(club , club_one);
    exit = true;
    break; 

Serialize.java

import java.util.InputMismatchException;
import java.util.Scanner;
import java.io.*;
import java.util.Arrays;

public class Serialize
{

    public Serialize(){
    //constructor
    }
   public void Serialize(ClubInfo club , Club1 club_one) // receive return type from printGreeting();
   {

      String fileName = club.teamName + ".ser";


      try {
         FileOutputStream fileOut = new FileOutputStream("/home/cg/root/" + fileName);
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(club);
         out.close();
         fileOut.close();

      System.out.printf("Serialized data is saved in C:/tmp/club.ser");
      }catch(IOException i)
      {
          i.printStackTrace();
      }

   }
}


简而言之,我如何确保“俱乐部”和“俱乐部一号”被我的“主菜单”类识别。以前我一直依赖于继承来传递值,但我已经了解到构造函数和对象是我可能要寻找的


我是一个新手,非常感谢您的帮助:)

错误在
主菜单中,而不是
序列化。更具体地说,这两条线:

saveclub1.Serialize(club , club_one);
saveclub2.Serialize(club , club_one);
您从未声明任何名为
club
club\u one
的变量,但尝试将它们作为参数传递给函数


我认为,在您试图修复破坏代码的问题之前,您的代码还有一些其他问题需要解决

问题1

“Serialize”是一个动词,表示它应该是方法,而不是类。您可以将其作为
ClubInfo
的一种方法。保存俱乐部的语法将变为:

ClubInfo myClub = new ClubInfo(arg1, arg2, arg3);
myClub.serialize();
问题2

您的代码混淆了实例。你把
Club1
做成了一个类,把
club\u one
做成了一个方法。Club one应该是
ClubInfo
的一个实例

ClubInfo club1 = new ClubInfo();
club1.teamName = "Arsenal";
club1.stadium = "Emirates";
问题3

您依赖调用者来初始化变量。初始化是构造函数的工作

public ClubInfo (String teamName, String stadium) {
    this.teamName = teamName;
    this.stadium = stadium;
}

// Example call to the constructor
Club club1 = new Club("Arsenal", "Emirates");
问题4

在名为
Serialize
的类中有一个名为
Serialize()的方法。如果必须有一个Serialize类(请参见问题1了解我认为不应该的原因),请将其重命名为
Serializer

问题5

如果在try块中途发生异常,则无法关闭流。关闭流的正确方法是在try块之前初始化流,然后在finally块中关闭它们:

    FileOutputStream fileOut = null;
    try {
        fileOut = new FileOutputStream("");
        // Do something with the stream
    } catch(IOException i) {
        // Handle error
    } finally {
        try {
            if (fileOut != null) {
                fileOut.close();
            }
        } catch (IOException ex) {
            // Ignore exception
        }
    }
要短得多。这称为“使用资源进行尝试”


您可以将其扩展到多个资源。有这样的例子。)

堆栈跟踪上的“找不到符号”,指的是“俱乐部”和“俱乐部一号”。你创建了线索和俱乐部一号的实例吗?是的,我有两个,都是这样的。公共类俱乐部1{public Club1(){//constructor}public void club_one(ClubInfo club_one){club_one.teamName=“阿斯顿别墅”club_one.stadium=“维拉公园”club_one.division=“英超”club_one.SSN=11122334;club_one.stadiumCapacity=40000;}在名为
Serialize
的类中有一个名为
Serialize()
的方法,该类不是构造函数??我刚刚在所有类中声明了无参数构造函数。序列化、声明类、无参数构造函数,最后是方法。反复使用同一个名字可能是个坏主意,但我是个新手,我会想出更有意义的名字。
    FileOutputStream fileOut = null;
    try {
        fileOut = new FileOutputStream("");
        // Do something with the stream
    } catch(IOException i) {
        // Handle error
    } finally {
        try {
            if (fileOut != null) {
                fileOut.close();
            }
        } catch (IOException ex) {
            // Ignore exception
        }
    }
    try (FileOutputStream fileOut = new FileOutputStream("")) {
        // Do something with the stream
    } catch(IOException i) {
        // Handle error
    }