如何在java中将字符串变量传递给新对象
我是Java新手,不知道如何正确地使用它 我有一个字符串变量如何在java中将字符串变量传递给新对象,java,Java,我是Java新手,不知道如何正确地使用它 我有一个字符串变量textMain,我想把它传递到一个新对象TextToSpeech。可能吗?如果是,怎么做 我必须在对象之外声明这个变量,不幸的是这个对象没有“看到”这个变量 String textMain = "text text"; textToSpeechSystem = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
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;
}
这是因为
TextToSpeech.OnInitListener
和textMain
在内存中的位置不同:TextToSpeech.OnInitListener
位于堆中,在当前上下文关闭后可用,但是textMain
位于堆栈中,在当前上下文关闭后不可用
去修理它。您只需将textMain
移动到堆中即可
final String textMain = "text text";
在匿名类/lambda中引用局部变量时,需要将该变量声明为final(不可变)
如果您想关闭
textMain
,它需要是final
。就是这样,太好了,非常感谢!这回答了你的问题吗?最后,正如oleg.cherednik所说,在变量final
使用final如何使其移动到堆中之前,我添加了一个变量?即使没有final关键字,字符串对象本身也将存储在堆中,引用将存储在堆栈中。使用final可确保捕获变量后,捕获变量的值不会更改。
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
}
}
});