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를 통해 데이터가 바뀌는 것 같은데 왜 결과가 반대인지 모르겠다.