繁体   English   中英

如何将字符串变量传递给java中的新对象

[英]How to pass a String variable to a new object in java

我是 Java 新手,不确定如何正确执行此操作。

我有一个 String 变量textMain ,我想将它传递给一个新对象TextToSpeech 是否可以? 如果是这样,该怎么做?

我必须在对象之外声明这个变量,不幸的是这个对象没有“看到”这个变量。

String textMain = "text text";
textToSpeechSystem = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
    public void onInit(int status) {
        if (status == TextToSpeech.SUCCESS) {
            speak(textMain); // textMain doesn't visible
        }
    }
});

对不起,如果我写错了,我还不知道正确的命名法。

您要传递字符串的对象需要有一个字段来存储值

假设您有一个带有构造函数的 TextToSpeech 类,该构造函数具有一个字符串参数,用于在创建对象时设置值。

public class TextToSpeech {
  private String textMain;
  ...

  public TextToSpeech(String text, ...) {
    textMain = text;
    ...
  }
}

或者您可以使用 setter 方法在对象创建后设置值

public void setText(String text) {
  textMain = text;
}

任何时候您在匿名类/ lambda 中引用局部变量时,您都需要将该变量声明为最终的(不可变的)。

final String textMain = "text text";
textToSpeechSystem = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
    public void onInit(int status) {
        if (status == TextToSpeech.SUCCESS) {
            speak(textMain); // textMain doesn't visible
        }
    }
});

那是因为TextToSpeech.OnInitListenertextMain在内存中的位置不同: TextToSpeech.OnInitListener位于堆中,当前上下文关闭后可用,但textMain位于堆栈中,当前上下文关闭后不可用。

要解决这个问题。 您所要做的就是将textMain移动到堆中

final String textMain = "text text";

暂无
暂无

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

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