POJO в Скала - PullRequest
       16

POJO в Скала

2 голосов
/ 24 мая 2019

У меня есть следующие 2 класса в Java

public class DataPoint<T> {

    public long timeStampMs;
    public T value;

    public DataPoint() {}

    public DataPoint(long timeStampMs, T value) {
        this.timeStampMs = timeStampMs;
        this.value = value;
    }

    public <R> DataPoint<R> withNewValue(R newValue){
        return new DataPoint(this.timeStampMs, newValue);
    }
    public KeyedDataPoint withKey(String key){
        return new KeyedDataPoint(key, this.timeStampMs, this.value);
    }
}

и

public class KeyedDataPoint<T> extends DataPoint<T>{

    public String key;

    public KeyedDataPoint() {}

    public KeyedDataPoint(String key, long timeStampMs, T value) {
        super(timeStampMs, value);
        this.key = key;
    }

    public <R> KeyedDataPoint<R> withNewValue(R newValue){
        return new KeyedDataPoint(this.key, this.timeStampMs, newValue);
    }

}

Мне нужно перевести тогда на Scala:

class DataPoint[T] (@BeanProperty val timeStampMs: Long, @BeanProperty val value: T) {
    def withNewValue[R](value: R): DataPoint[R] = new DataPoint[R](timeStampMs, value)
    def withKey(key: String): KeyedDataPoint[T] = new KeyedDataPoint(key, timeStampMs, value)
}

class KeyedDataPoint[T](@BeanProperty val key: String,
                        @BeanProperty override val timeStampMs: Long,
                        @BeanProperty override val value: T) extends DataPoint (timeStampMs, value) {
}

Классы должны квалифицироваться как POJO, но я не могу понять, как их получить. Если я предоставлю первичный конструктор без аргументов, то я не знаю, как предоставить вспомогательный конструктор с несколькими аргументами, и наоборот ... если я оставлю первичный конструктор для нескольких аргументов, то я не знаю, как предоставить Конструктор без аргументов требует соответствия POJO. Любая помощь?

Ответы [ 2 ]

3 голосов
/ 24 мая 2019
class Foo(s: String) {
    // alternative no-arg constructor (with different signature from primary)
    def this() {
        this("Default value from auxiliary constructor")
    }
}

см. здесь

0 голосов
/ 24 мая 2019
class KeyedDataPoint[T](@BeanProperty val key: String,
                        @BeanProperty override val timeStampMs: Long,
                        @BeanProperty override val value: Option[T]) extends DataPoint (timeStampMs, value) {
}  

class DataPoint[T] (@BeanProperty val timeStampMs: Long, @BeanProperty val value: Option[T]) {
    def this() {
      this(0, None);
    }  
    def withNewValue[R](value: Option[R]): DataPoint[R] = new DataPoint(timeStampMs, value)
    def withKey(key: String): KeyedDataPoint[T] = new KeyedDataPoint(key, timeStampMs, value)
}  
...