У меня очень простой пример как на java, так и на scala Java one:
public class LowerBound {
public void myFunction(List<? super Integer> myList) {
myList.forEach(System.out::println);
}
}
public class LowerBoundMain {
public static void main(String[] args) {
LowerBound lb = new LowerBound();
List<Integer> myList1 = new ArrayList<Integer>();
myList1.add(1);
myList1.add(2);
myList1.add(3);
lb.myFunction(myList1);
List<Double> myList2 = new ArrayList<Double>();
myList2.add(2.0);
myList2.add(3.2);
//lb.myFunction(myList2);
}
}
здесь, как я и ожидал, lb.myFunction (myList2) выдает ошибку, потому что я жду List ‹Integer› или супертип List ‹Integer›, а List ‹Double› не является супертипом Integer
Но в Scala
class AnotherLowerBound {
def myFunction[T >: List[Int]](input: T) = {
println(input)
}
}
object LowerBoundScalaMain extends App{
val pos1 = new AnotherLowerBound
val myList: List[Double] = List(2.32,4.31,3.54)
pos1.myFunction(myList)
}
он печатает List [Double] без проблем? Является ли причиной того, что в Scala и List [Double], и List [Integer] являются подтипом AnyRef? Или я ошибаюсь в синтаксисе?