Dart에서 슈퍼 클래스에서 서브 클래스로 콜백하는 방법

Pauleohare

목록에 문자열을 추가하고 다른 작업을 수행하는 추상 클래스가 있습니다.

abstract class Abc {
  final _list = <String>[];
  Function(String) addedValue;

  void add(String s) {
    _list.add(s);
    if (this.addedValue != null) this.addedValue(s);
  }
}

내 하위 클래스에서 문자열이 목록에 추가 될 때마다 콜백을 원합니다. 콜백을 원하거나 원하지 않을 수있는 다른 하위 클래스도 있습니다.

class Xyz extends Abc {
  String _data = '';

  Xyz() {
    this.addedValue = _added;
  }

  void _added(String s) {
    _data += '$s,';
    print('data: $_data');
  }
}
main() {
  var a = Xyz();
  a.add('hello');
  a.add('goodbye');

  a.addedValue('a'); // Prefer if this was not possible.
  a.addedValue = null; // Prefer if this was not possible.
}

콜백 메서드로 수퍼 클래스를 제공하는 가장 깨끗한 방법은 무엇입니까?

  • 인스턴스 메서드이기 때문에 생성자에 전달할 수 없습니다.
  • 인스턴스에 대한 액세스가 필요하기 때문에 정적으로 만들 수 없습니다.
  • 하위 클래스 이상으로 콜백 메서드 / 세터를 노출하지 않는 것이 좋습니다.
  • 수퍼 클래스와 서브 클래스는 동일한 라이브러리에 있지 않습니다.
julemand101

당신은 같은 방법을 만들 수 setCallback에서 Abc가능 콜백을 설정하지하지만 더 이상 호출 할 수 있도록 할 수 있습니다 추상 클래스. 이렇게하면 생성자에서 콜백을 설정할 수 있습니다 Xyz.

abstract class Abc {
  final _list = <String>[];
  Function(String) _addedValue;

  void add(String s) {
    _list.add(s);
    if (this._addedValue != null) this._addedValue(s);
  }

  void setCallback(Function(String) callback) => _addedValue = callback;
}

class Xyz extends Abc {
  String _data = '';

  Xyz() {
    setCallback(_added);
  }

  void _added(String s) {
    _data += '$s,';
    print('data: $_data');
  }
}

main() {
  var a = Xyz();
  a.add('hello');
  a.add('goodbye');

  a.addedValue('a'); // No longer possible
  a.addedValue = null; // No longer possible
}

나는 또한 다음과 같은 해결책을 만들었다. 그러나 그것은 너무 추하고 완전히 어리석은 일이라서 먼저 제시 할 또 다른 더 합리적인 해결책을 만들어야했다. 그러나 다른 사람들을 혼동시키려는 의도라면 "작동한다"고 말할 것이다.

다음 구현의 개념은 콜백에 변수를 저장하는 대신 콜백 메서드를 제공 할 수있는 메서드에 변수를 저장하는 것입니다.

abstract class Abc {
  final _list = <String>[];
  Function(String) Function(Abc) _getCallback;

  Abc(this._getCallback);

  void add(String s) {
    _list.add(s);
    if (this._getCallback != null && this._getCallback(this) != null)
      this._getCallback(this)(s);
  }
}

class Xyz extends Abc {
  String _data = '';

  Xyz() : super((obj) => obj is Xyz ? obj._added : null);

  void _added(String s) {
    _data += '$s,';
    print('data: $_data');
  }
}

main() {
  var a = Xyz();
  a.add('hello');
  a.add('goodbye');

  a.addedValue('a'); // No longer possible
  a.addedValue = null; // No longer possible
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Nashorn에서 슈퍼 클래스 구성원에 액세스하는 방법

분류에서Dev

슈퍼 클래스의 현재 인스턴스가 슈퍼 클래스 내에서 하위 클래스인지 확인하는 올바른 방법

분류에서Dev

ES6에서 슈퍼 클래스의 약속을 실행하는 방법

분류에서Dev

Objective-C는 슈퍼 클래스를 서브 클래스로 캐스팅

분류에서Dev

슈퍼 클래스에서 추상 선언이없는 서브 클래스에서 getter를 호출하는 방법

분류에서Dev

서브 클래스에서 슈퍼 클래스 객체 시작

분류에서Dev

서브 클래스가 파이썬에서 슈퍼 클래스의 메서드를 확장하도록하는 방법

분류에서Dev

슈퍼 클래스와 서브 클래스에 단검 주입

분류에서Dev

Swift의 슈퍼 클래스에서 하위 클래스 속성에 액세스

분류에서Dev

하위 클래스에서 함수를 호출하는 슈퍼 클래스

분류에서Dev

슈퍼 클래스의 하위 클래스에서 C ++ 호출 메서드

분류에서Dev

클래스에서 콜백을 나열하는 방법

분류에서Dev

슈퍼 클래스 생성자에서 어떤 하위 클래스 지정

분류에서Dev

Objective C의 슈퍼 클래스에서 private 메서드와 속성을 재정의하는 방법

분류에서Dev

서브 클래스에서 슈퍼 클래스 인스턴스 변수 변경

분류에서Dev

서브 클래스 (Objective-C)에서 슈퍼 클래스의 속성을 사용할 수없는 이유

분류에서Dev

Java에서 생성자의 기본값으로 하위 클래스를 재정의하는 슈퍼 클래스

분류에서Dev

슈퍼 클래스로 캐스팅 한 후 하위 클래스에서 데이터 가져 오기

분류에서Dev

Swift에서 지정된 슈퍼 클래스 이니셜 라이저를 호출하는 방법

분류에서Dev

상속 된 다른 클래스에서 슈퍼 생성자를 호출하는 방법은 무엇입니까?

분류에서Dev

서브 클래스 및 슈퍼 클래스 메서드

분류에서Dev

서브 클래스 인스턴스에 슈퍼 클래스 유형 사용

분류에서Dev

슈퍼 클래스 메소드는 객체가 서브 클래스의 경우에도 호출되는

분류에서Dev

서브 클래스가 필요한 메서드에 슈퍼 클래스 전달

분류에서Dev

메서드로 /에서 슈퍼 클래스를 전달할 때 자동 다운 캐스팅을 방지하는 방법

분류에서Dev

모든 하위 클래스에 대해 한 곳 (슈퍼 클래스)에서 Mockito 규칙을 설정하는 방법

분류에서Dev

"super"키워드를 사용하거나 서브 클래스의 메서드에서 로컬로 슈퍼 클래스 메서드를 호출 할 때 슈퍼 클래스 인스턴스를 사용합니까?

분류에서Dev

서브 클래스와 슈퍼 클래스

분류에서Dev

슈퍼 클래스 서브 클래스 생성자 java

Related 관련 기사

  1. 1

    Nashorn에서 슈퍼 클래스 구성원에 액세스하는 방법

  2. 2

    슈퍼 클래스의 현재 인스턴스가 슈퍼 클래스 내에서 하위 클래스인지 확인하는 올바른 방법

  3. 3

    ES6에서 슈퍼 클래스의 약속을 실행하는 방법

  4. 4

    Objective-C는 슈퍼 클래스를 서브 클래스로 캐스팅

  5. 5

    슈퍼 클래스에서 추상 선언이없는 서브 클래스에서 getter를 호출하는 방법

  6. 6

    서브 클래스에서 슈퍼 클래스 객체 시작

  7. 7

    서브 클래스가 파이썬에서 슈퍼 클래스의 메서드를 확장하도록하는 방법

  8. 8

    슈퍼 클래스와 서브 클래스에 단검 주입

  9. 9

    Swift의 슈퍼 클래스에서 하위 클래스 속성에 액세스

  10. 10

    하위 클래스에서 함수를 호출하는 슈퍼 클래스

  11. 11

    슈퍼 클래스의 하위 클래스에서 C ++ 호출 메서드

  12. 12

    클래스에서 콜백을 나열하는 방법

  13. 13

    슈퍼 클래스 생성자에서 어떤 하위 클래스 지정

  14. 14

    Objective C의 슈퍼 클래스에서 private 메서드와 속성을 재정의하는 방법

  15. 15

    서브 클래스에서 슈퍼 클래스 인스턴스 변수 변경

  16. 16

    서브 클래스 (Objective-C)에서 슈퍼 클래스의 속성을 사용할 수없는 이유

  17. 17

    Java에서 생성자의 기본값으로 하위 클래스를 재정의하는 슈퍼 클래스

  18. 18

    슈퍼 클래스로 캐스팅 한 후 하위 클래스에서 데이터 가져 오기

  19. 19

    Swift에서 지정된 슈퍼 클래스 이니셜 라이저를 호출하는 방법

  20. 20

    상속 된 다른 클래스에서 슈퍼 생성자를 호출하는 방법은 무엇입니까?

  21. 21

    서브 클래스 및 슈퍼 클래스 메서드

  22. 22

    서브 클래스 인스턴스에 슈퍼 클래스 유형 사용

  23. 23

    슈퍼 클래스 메소드는 객체가 서브 클래스의 경우에도 호출되는

  24. 24

    서브 클래스가 필요한 메서드에 슈퍼 클래스 전달

  25. 25

    메서드로 /에서 슈퍼 클래스를 전달할 때 자동 다운 캐스팅을 방지하는 방법

  26. 26

    모든 하위 클래스에 대해 한 곳 (슈퍼 클래스)에서 Mockito 규칙을 설정하는 방법

  27. 27

    "super"키워드를 사용하거나 서브 클래스의 메서드에서 로컬로 슈퍼 클래스 메서드를 호출 할 때 슈퍼 클래스 인스턴스를 사용합니까?

  28. 28

    서브 클래스와 슈퍼 클래스

  29. 29

    슈퍼 클래스 서브 클래스 생성자 java

뜨겁다태그

보관