class SetTextActivity : AppCompatActivity() {
lateinit var binding: ActivitySetTextBinding
override fun onCreate(savedInstanceState: Bundle?) {
...
/**
* editTextOutput은 editText의 id이다.
* input은 String이다.
*/
editTextOutput.text = input
}
}
위의 방법으로 EditText의 text를 설정하려는 데 아래와 같이 에러가 발생했다.
Type mismatch.
Required: Editable!
Found: String
Editable
type이 들어가야 하는데, String
을 넣어서 타입이 맞지 않았다.
Editable
This is the interface for text whose content and markup can be changed (as opposed to immutable text like Strings)
내용이나 마크업이 변경될 수 있는 텍스트(String과 반대)를 위한 인터페이스
T!
T
또는T?
를 의미한다. 'null이 될 수도~ 안 될 수도~'
즉,T
타입의 널 가능성에 대해 아무 정보도 없다는 뜻이다.
editTextOutput.setText(input)
editTextOutput2.text = Editable.Factory.getInstance().newEditable(input)
디컴파을 해보았다.
val input = binding.editTextInput.text.toString()
val editTextOutput = findViewById<EditText>(R.id.editTextOutput)
val editTextOutput2 = findViewById<EditText>(R.id.editTextOutput2)
// 0. 속성에 직접 대입 (X : Type Mismatch)
editTextOutput.text = input
// 1. setter 사용 (O)
editTextOutput.setText(input)
// 2. Editable 형태로 바꾸기 (O)
editTextOutput2.text = Editable.Factory.getInstance().newEditable(input)
EditText var5 = var10000.editTextInput;
Intrinsics.checkNotNullExpressionValue(var5, "binding.editTextInput");
String input = var5.getText().toString();
EditText editTextOutput = (EditText)this.findViewById(1000360);
EditText editTextOutput2 = (EditText)this.findViewById(1000135);
Intrinsics.checkNotNullExpressionValue(editTextOutput, "editTextOutput");
// 0. 속성에 직접 대입 (X : Type Mismatch)
editTextOutput.setText((CharSequence)input);
// 1. setter 사용 (O)
editTextOutput.setText((CharSequence)input);
Intrinsics.checkNotNullExpressionValue(editTextOutput2, "editTextOutput2");
// 2. Editable 형태로 바꾸기 (O)
editTextOutput2.setText((CharSequence)Factory.getInstance().newEditable((CharSequence)input))
0번과 1번 둘 다 CharSequence
로 형변환해서 setter를 통해 데이터가 바뀌는 것 같은데 왜 결과가 반대인지 모르겠다.