0

我有两个名为x.java和的 java 类y.java

x.java我有一个受保护的方法:

protected ResultSet populateSpeciesList(ResultSet results)

在这个受保护的方法中,我有一个 if 语句:

if (fsTitle != null)
{
    sp.setFireStudyTitle("Available");
    String sppAcronym = results.getString("ACRONYM");

    FireStudyQueryBuilder qb = new FireStudyQueryBuilder();

    this.magicString = qb.buildMagicString();
}

现在y.java我有一个方法是这样的:

String buildMagicString()
{                 
    String sppAcronym = getAcronym();

    String newQueryString = a bunch of SQL;

    return newQueryString;
}

问题是,我不能在其他类中使用 sppAcronym,因为它无法识别。

所以我的问题是,如何将变量从类传递给另一个?

谢谢。

4

6 回答 6

3

你不能像下面这样重写你的方法 buildMagicString() 吗?

String buildMagicString(String sppAcronym) //This allows the caller to pass a argument to this method.
{                 

    System.out.println(sppAcronym); //This statement will compile because sppAcronym is a valid member of this method.

    String newQueryString = a bunch of SQL;

    return newQueryString;
}

然后您只需按如下方式调用该方法:

if (fsTitle != null)
{
    sp.setFireStudyTitle("Available");
    String sppAcronym = results.getString("ACRONYM");

    FireStudyQueryBuilder qb = new FireStudyQueryBuilder();

    this.magicString = qb.buildMagicString(sppAcronym); //Passes the sppAcronym object to the buildMagicString() method.
}
于 2013-08-08T05:12:52.377 回答
2

在方法中传递您的变量,如下所示

this.magicString =  qb.buildMagicString(sppAcronym);

而你另一个课程中的方法是

String buildMagaicString(String sppAcronym){

//do whatever you want with sppAcronym
   return yourDesiredResult;
}
于 2013-08-08T05:12:42.717 回答
1

这里有一个提示:

String buildMagicString (String sppAcronym) {
    ...
}

从那里开始,它非常简单——它与results传递给populateSpeciesList().

于 2013-08-08T05:10:12.643 回答
0

您不能仅仅因为它是一个局部变量而在另一个类中使用sppAcronym变量。实际上你甚至不能在同一个类的其他地方使用它,它的范围只存在于指定的方法中。如果您确实需要在其他类中使用该变量值,请将其声明为私有字段,然后通过 getter 和 setter 访问。

于 2013-08-08T05:14:07.773 回答
0

你有很多方法。对您来说正确的一个取决于您使用的对象模型的结构。

但是,您必须了解两个基本概念:

1.什么是“交点”。

为了让A' 实例(调用它a1)能够与B' 实例(b1)进行通信,a1必须有一种方法可以“把手”放在对 的引用上b1。一些示例方法是:

  • 每个Aget 都是对B' 实例的引用,作为其构造函数或另一个“设置”方法的参数,然后将其存储为为此目的而制作的字段。
  • a1b1共享一个共同的 class 实例Cc可以是两者的“父级”a1b1(即包含两者),也可以是管理程序中某个进程的某个“管理器”组件。
  • static\singleton方式。B类存储它自己的一个静态实例,它允许从程序中的任何地方引用它。

2. 想要的通讯接口是什么

一个类向其他类公开的接口应该经过精心设计,以实现许多重要概念,例如:代码的可读性、安全性和“隐藏”、可靠性等。这还取决于两者A是否B存储在同一个包中或内部彼此的类,甚至彼此继承。

一些标准的沟通方式是:

  • 直接写入访问:一个字段Bpublic暴露并允许直接写入。这主要是一种不良行为(经验法则是所有字段至少应该是protectedif not private)。
  • set方法:B有一个 set 方法接收计算的数据,处理它并将其存储在它的字段中(或传递它)。
  • 侦听 -A将计算的数据存储在自身中,并让所有已注册的“侦听器”通过在其中调用适当的方法来知道有新数据可用。侦听器对相关字段具有读取权限,或者数据作为参数传递,然后侦听器 ( b1) 决定如何处理数据。
于 2013-08-08T05:14:17.213 回答
-1

最方便的方法是制作 sppAcronymas 私有变量并为其提供公共 setter 和 getter,这样您就可以创建 y.java 类的对象

y obj=new y();

并在您的 x.java 中使用 setter 和 getter 示例可以是:-

在 y.java 中

private String sppAcronym;
public void setsppAcronym(String sppAcronym)
{
this.sppAcronym=sppAcronym;
}
public String getsppAcronym()
{
return sppAcronym;
}

在 x.java 中

y obj=new y();

obj.setsppAcronym(getAcronym);
String sppAcronym=obj.getsppAcronym();
于 2013-08-08T05:32:54.117 回答