![](/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.