![](/img/trans.png)
[英]Should we pass argument to a method as a variable or as a new object directly in 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.OnInitListener
和textMain
在内存中的位置不同: TextToSpeech.OnInitListener
位于堆中,当前上下文关闭后可用,但textMain
位于堆栈中,当前上下文关闭后不可用。
要解决这个问题。 您所要做的就是将textMain
移动到堆中。
final String textMain = "text text";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.