【发布时间】:2011-06-26 08:03:43
【问题描述】:
在 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 的 Manifests 可以用来解决这个问题,但我不知道如何。我在文档中也没有发现任何有用的东西。
所以我的问题是:我如何使用Manifests(或其他任何有效的方法)来重载由于擦除而擦除为相同类型的泛型类型的方法?
【问题讨论】:
-
实际上,我可能想收回那次近距离投票:引用的问题有一个额外的问题,即某些解决方案只是巧合地起作用,因为其中一种类型是具有两个泛型的元组列表。您可以从 cmets 中找出适用于该版本问题的解决方案,但要弄清楚到底发生了什么需要大量工作。
标签: generics scala manifest reification