繁体   English   中英

如何使用在另一个类中声明的变量?

[英]How can I use variables that are declared in another class?

我正在自动执行每晚发送的电子邮件。 “发送电子邮件”类包含的变量mailFrommailTo ExcelReader是先决条件类,可读取将包含电子邮件地址的Excel工作表的单元格。 我需要我的“发送电子邮件”( SendCf )类来获得它的mailFrommailTo从变量ExcelReader类(得到它的从Excel工作表的单元变量)。

目的是让其他人可以使用不同的“收件人” /“发件人”电子邮件地址修改Excel工作表,而我每晚发送的电子邮件将对此进行反映。 因此,我每次发送电子邮件时都需要从Excel工作表中提取信息(也不知道如何使该方法作为电子邮件的先决条件运行)。

首先,我的ExcelReader 它声明变量a1Valb1Val的值(包含所需电子邮件地址的单元格)。

package com.test.Email;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; 
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelReader {

    public static void main(String[] args) {
        try {
            FileInputStream fileInputStream = new  FileInputStream("C:/Users/TEST.xlsx");
            XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
            XSSFSheet worksheet = workbook.getSheetAt(0);

            XSSFRow row1 = worksheet.getRow(0);
            XSSFCell cellA1 = row1.getCell((int) 0);
            String a1Val = cellA1.getStringCellValue();
            XSSFCell cellB1 = row1.getCell((int) 1);
            String b1Val = cellB1.getStringCellValue();

所以现在我们有了从excel设置的变量。 mailTo和mailFrom在单元格A1和B1中。 现在,我需要我的Send Email类从ExcelReader类中获取A1和B1并将它们的值分配给发送者和接收者。 我知道下面的内容非常不正确。

package com.test.Email;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

     public class SendCF {

        //Not sure about this, I think I need to declare a local ExcelReader here?
        ExcelReader cfExcel = new ExcelReader();


     public static void main(String[] args) 

            String host = "smtp.gmail.com";
            String port = "587";
//These two variables, I need to get from the excel sheet via the ExcelReader class.
            String mailFrom = cfExcel.a1Val; 
            String mailTo = "cfExcel.b1Val;
            String password = "QAtesting";

            // after this I compose the email and send it.

编辑:我现在在main方法之外声明变量,但是不允许我将它们公开。 我得到“变量a2Val的非法修饰符;仅允许final”

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelReader {
                {
    try {
        FileInputStream fileInputStream = new     FileInputStream("C:/Users/test.xlsx");
        XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
        XSSFSheet worksheet = workbook.getSheetAt(0);

        XSSFRow row1 = worksheet.getRow(0);
        XSSFCell cellA1 = row1.getCell((int) 0);
        String a1Val = cellA1.getStringCellValue();
        XSSFCell cellB1 = row1.getCell((int) 1);
        String b1Val = cellB1.getStringCellValue();
        XSSFCell cellC1 = row1.getCell((int) 2);
        String c1Val = cellC1.getStringCellValue();
        XSSFCell cellD1 = row1.getCell((int) 3);
        String d1Val = cellD1.getStringCellValue();
        XSSFCell cellE1 = row1.getCell((int) 4);
        String e1Val = cellE1.getStringCellValue();
        XSSFCell cellF1 = row1.getCell((int) 5);
        String f1Val = cellF1.getStringCellValue();

      } catch (FileNotFoundException e) {
        e.printStackTrace();
        } catch (IOException e) {
        e.printStackTrace();
        }
}


public static void main(String[] args) {
    //dont think I need anything here?

    }
}

您在main方法中定义了a1Valb1Val ,这些变量只能在该范围内访问。 如果要在class之外访问它们,则需要使它们成为全局变量。 如果要直接访问它们,则需要使用public修饰符,或者可以使用private并创建getterssetters第二个选项。

方法1:

public class ExcelReader {
    public String a1Val;
    public String b1Val;

    public static void main(String[] args) {

像这样访问:

    cfExcel.a1Val;

方法2:

public class ExcelReader {
    private String a1Val;
    private String b1Val;

    public String geta1Val()
    {
        return this.a1Val;
    }

    public String getb1Val()
    {
        return this.b1Val;
    }

    public void seta1Val(String a1Val)
    {
        this.a1Val = a1Val;
    }

    public void setb1Val(String b1Val)
    {
        this.b1Val = b1Val;
    }

    public static void main(String[] args) {

像这样访问:

cfExcel.geta1Val();
cfExcel.seta1Val("test");

****************************************************** ****** UPDATE *********************************************** ***************

它应该是这样的:

public class ExcelReader {
    public String a1Val;
    public String b1Val;

    public static void main(String[] args) {
        try {
            FileInputStream fileInputStream = new  FileInputStream("C:/Users/TEST.xlsx");
            XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
            XSSFSheet worksheet = workbook.getSheetAt(0);
            XSSFRow row1 = worksheet.getRow(0);
            XSSFCell cellA1 = row1.getCell((int) 0);
            a1Val = cellA1.getStringCellValue();
            XSSFCell cellB1 = row1.getCell((int) 1);
            b1Val = cellB1.getStringCellValue();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM