C# では、次の例に示すように、ジェネリック型でメソッドをオーバーロードできます。
// http://ideone.com/QVooD
using System;
using System.Collections.Generic;
public class Test {
public static void Foo(List<int> ints) {
Console.WriteLine("I just print");
}
public static void Foo(List<double> doubles) {
Console.WriteLine("I iterate over list and print it.");
foreach(var x in doubles)
Console.WriteLine(x);
}
public static void Main(string[] args) {
Foo(new List<int> {1, 2});
Foo(new List<double> {3.4, 1.2});
}
}
ただし、Scala で同じことをしようとすると、コンパイル時エラーが発生しList[Int]、List[Double]消去のために同じ型に消去されます。Scala の を使用してこれを回避できると聞きManifestましたが、方法がわかりません。ドキュメントにも役立つものは何も見つかりませんでした。
だから私の質問は: Manifests (または他の機能するもの) を使用して、消去のために同じ型に消去されるジェネリック型のメソッドをオーバーロードするにはどうすればよいですか?