2014-06-17 2 views
4

기본적으로, 나는 다른 인수로 부모 클래스를 오버라이드하고 싶습니다. 예를 들어 : 분명이, Field set overloads parent class with different or incomplete type가 오류를 반환합니다반올림하지 않는 인수로 상위 메소드 무시하기

class HoldMore extends Hold<T> { 
    public var value2:T; 
    public function new(value:T, value2:T) { 
     super(value); 
     set(value, value2); 
    } 
    override public function set(value:T, value2:T) { 
     this.value = value; 
     this.value2 = value2; 
    } 
} 

:

class Hold<T> { 
    public var value:T; 
    public function new(value:T) { 
     set(value); 
    } 
    public function set(value:T) { 
     this.value = value; 
    } 
} 

는 다음과 같은 클래스, 뭔가를 우선합니다. 이 문제를 해결할 방법이 있습니까? public dynamic function을 사용하고 new() 함수에 set을 설정했지만 매우 유사한 오류가 발생했습니다. 이견있는 사람?

답변

3

이것은 단지 @ stroncium의 대답은 완전히 맞습니다. 하면 파라미터 또는 위해 여러 값을 유지하는 동적 인 오브젝트로서 배열을 사용할 수있는 대안

class Hold<T> { 
    public var value:T; 
    public function new(value:T) { 
     set(value); 
    } 
    public function set(value:T) { 
     this.value = value; 
    } 
} 

class HoldMore<T> extends Hold<T> { 
    public var value2:T; 
    public function new(value:T, value2:T) { 
     super(value); 
     setBoth(value, value2); 
    } 
    // you cannot override "set" with a different signature 
    public function setBoth(value:T, value2:T) { 
     this.value = value; 
     this.value2 = value2; 
    } 
} 

들이 동일한 방법을 사용하여 "설정"다음 여기

는 것처럼 볼 수 있는지의 예이다 ,하지만 컴파일러의 형식 검사 중 일부는 느슨합니다.

0

불행히도 언어에서는 허용하지 않습니다.

0

기본 클래스를 작성한 경우 선택적 인수를 추가 할 수 있지만 직접 해결하지 않아도됩니다.

1

현재 상태에서는 완전히 작동하지 않습니다. 1 문제,하지만 그들 중 몇뿐만 아니라 있습니다 :

  1. 유형 T이 새로운 클래스의 맥락에서 의미가, 당신은 몇 가지 구체적인 유형을 사용하거나 T. 이상이 클래스를 템플릿해야 하나
  2. 당신은 변경할 수 없습니다 그것을 오버라이드 할 때 함수의 인수의 갯수. 그러나 다른 함수를 추가하여 2 개의 인수를 허용하고 원하는 것을 수행 할 수 있습니다. (이는 대부분의 언어에서 사용하는 방식입니다).
  3. 나는 거기에 반공 변성 문제를 어떻게 보는지 정말로 모르겠다. 실제 문제는 haxe가 함수 오버로드를 지원하지 않는다는 것입니다. 실제로 함수 시그니처는 이름 + 전체 형식이지만, 여러분이 작성하거나 지원하고자하는 것이 아니며 대부분 js/java externs에 사용됩니다.
관련 문제