Замена класса Scala - PullRequest
       12

Замена класса Scala

1 голос
/ 25 января 2012

Есть библиотека Java с классами:

class DefaultFieldFactory {
  ...
  public static String createCaptionByPropertyId(Object propertyId) { ... }
  ...
}

class FieldFactory extends DefaultFieldFactory {
  ...
  // Lot of methods that use DefaultFieldFactory.createCaptionByPropertyId
  ...
}

Я использую класс FieldFactory в проекте Scala, и мне нужно изменить метод createCaptionByPropertyId.

Как я могу сделать это без AOP и переписать класс FieldFactory?

Можно ли заменить реализацию класса DefaultFieldFactory в пакете? Это относительно просто и коротко.

Спасибо заранее, Etam.

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Статический класс входит в object в Scala, который не наследует статические методы DefaultFieldFactory, что, на самом деле, хорошо отражает тот факт, что вы не можете переопределить статику.

Это одна из причин, по которой статика осуждается.

1 голос
/ 26 января 2012

Я думаю, что есть хакерский способ сделать это ... Но если у вас есть исходный код для исходного класса Java, я настоятельно рекомендую вам изменить его.

Если нет, вы можете создать новую реализацию DefaultFieldFactory как объект в вашем классе, который скрывает исходную реализацию в вашем классе. Тогда реализация объекта DefaultFieldFactory может вызывать исходные Java-имплиментации.

// in package x.y.a
class DefaultFieldFactory {
  ...
  public static String createCaptionByPropertyId(Object propertyId) { ... }
  ...
}

// in package x.y.b
class FieldFactory extends DefaultFieldFactory {

  object DefaultFieldFactory{


    def createCaptionByPropertyId(propertyId: AnyRef): String { 
      //import the original implimentation
      import x.y.b.DefaultFieldFactory._
      ... 
    }
  }


  // Lot of methods that use DefaultFieldFactory.createCaptionByPropertyId
  ...
}

Как я уже сказал ... не приятно!

...