2012-11-03 3 views
1

Java에서 추상 클래스의 정적 멤버는 모든 하위 클래스를 통해 상속됩니다. 이것은 스칼라에서이 Java 메커니즘을 구현하는 방법은 무엇입니까?

abstract class TopThing{ 
    public TopThing next; 
    public TopThing(TopThing tt){ 
     this.next = tt 
    } 

    private static HashTable<String, TopThing> someTable = new HashTable<String,TopThing>(); 
    protected void add(String name) { 
     someTable.put(name, this); 
    public static Parent forName(String name) { 
     return someTable.get(name) ; 
    } 
} 

class SomeSpecific extends TopThing { 
    public final String name; 
    public SomeSpecific (String name, TopThing tt) { 
     super(tt); 
     this.name = name; 
     this.add(name); 
} 

처럼 스칼라, 에 나는 위의 사용 동반자 목적을 달성하기 위해 알고있는 유일한 방법을 쓰기 처음입니다,하지만이 경우

  • 수 작동하지 않는 것 같다 동반자 개체는 개인 정적 테이블을 저장합니까? (그렇지 않습니다 ...)
  • 컴패니언 개체에서 테이블을 선언 할 수 있다면 컴패니언 클래스에서 참조한 이 될 수 있습니까? (그렇지 않습니다 ...)
  • add 메서드에서 서브 클래스의 인스턴스를 참조하여 테이블에 삽입 할 수 있습니까? (질문은 add 메서드에 대해서도 this 임)
  • 스칼라에서는이게 무슨 좋은 습관입니까? 질문 1에 대한

답변

6
  1. .

  2. 예, 이것을 TopThing.someTable (또는 import TopThing._ 이후에만 someTable)으로 참조하십시오.

  3. 자바와 동일 : this. 그래서

    abstract class TopThing(val next: TopThing) { 
        protected def add(name: String) { 
        TopThing.someTable += (name -> this) 
        } 
    } 
    
    object TopThing { 
        private val someTable = collection.mutable.Map[String,TopThing]() 
    
        def forName(name: String) = someTable.get(name) 
    } 
    
    class SomeSpecific(val name: String, next: TopThing) extends TopThing(next) { 
        this.add(name) 
    } 
    
0

: 아니,하지만 당신은 질문 3의 수입

class Xxx { 
    import Xxx._ 
    ... 
} 

사용할 수 있습니다 : 당신은 질문이 들어

개인 [공간]을 사용할 수 있습니다 내가 알고하지 않는 방법 대답하라. 질문 4

:

네, 할 수
trait TopThing { 
    val someTable: HashTable[String, TopThing] 
} 
class Xxx extend TopThing { 
    val someTable = Xxx.someTable 
} 
+0

은 "나는 그것을 대답하는 방법을 알고하지 않습니다." Q 셔츠를 입고 싶습니다. 가급적이면 lolcat. 또한, 글 머리 기호 # 4에 답하기 위해 +1 하겠지만 someTable이 theTable이어야한다는 것을 제외하고는 다른 응답과 마찬가지로 생각합니다. –

+3

표를 특성에 넣으면 하나의 _per instance_가 작성되며 Java 코드의 _static_ 테이블과 동일한 것은 아닙니다. – DaoWen

관련 문제