확장(extension)에 정의되지 않은 setter
확장(extension)에 정의되지 않은 setter
이 진단은 확장 오버라이드(extension override)나 정적(static) setter를 호출했는데, 지정한 확장이 그 setter를 정의하지 않았을 때 analyzer가 만들어 내는 진단이에요. setter 이름을 어떻게 고쳐야 하는지 예시와 함께 차근차근 살펴볼게요.
본문
The setter '{0}' isn't defined for the extension '{1}'. — 확장 {1}에 setter {0}이 정의되어 있지 않다는 뜻이에요.
설명 (Description)
이 진단은 확장 오버라이드(extension override)를 사용해 setter를 호출했는데, 지정한 확장이 그 setter를 정의하지 않았을 때 발생해요. 또 정적(static) setter를 참조했는데 지정한 확장이 그 setter를 정의하지 않았을 때도 이 진단이 발생해요.
예시 (Example)
다음 코드는 확장 E가 b라는 인스턴스(instance) setter를 선언하지 않았기 때문에 이 진단이 발생해요.
extension E on String {
set a(String v) {}
}
extension F on String {
set b(String v) {}
}
void f() {
E('c').b = 'd';
}
다음 코드는 확장 E가 a라는 정적(static) setter를 선언하지 않았기 때문에 이 진단이 발생해요.
extension E on String {}
void f() {
E.a = 3;
}
해결 방법 (Common fixes)
setter의 이름이 잘못되었다면, 기존에 존재하는 setter의 이름으로 바꾸면 돼요.
extension E on String {
set a(String v) {}
}
extension F on String {
set b(String v) {}
}
void f() {
E('c').a = 'd';
}
setter의 이름은 맞는데 확장의 이름이 잘못되었다면, 확장의 이름을 올바른 이름으로 바꾸면 돼요.
extension E on String {
set a(String v) {}
}
extension F on String {
set b(String v) {}
}
void f() {
F('c').b = 'd';
}
setter와 확장의 이름이 모두 맞는데 setter가 정의되어 있지 않다면, setter를 직접 정의해 주면 돼요.
extension E on String {
set a(String v) {}
set b(String v) {}
}
extension F on String {
set b(String v) {}
}
void f() {
E('c').b = 'd';
}