给定Java类
public class Test {
public static int foo(Object o) {
return 10;
}
}
Scala编译器将参数类型Object映射到scala.Any。
scala> Test.foo _
res0: Any => Int = <function1>
我想原因是允许将Scala原语(如true)传递给这样的函数,这在许多情况下可能是可取的。有什么重要的例子吗?
scala> Test.foo(true)
res1: Int = 10
下面是一个反例:
scala> val h
为什么下面的代码会出现错误。我想Function1是[-A,+A]型的
scala> class CSuper
defined class CSuper
scala> class CBase extends CSuper
defined class CBase
scala> class CSub extends CBase
defined class CSub
scala> val f:Function1[CBase,CBase] = (c:CBase) => new CBase
f: CBase => CBase = $$Lambda$1284/20
有人能解释一下为什么下面的代码不起作用吗?
scala> abstract class A[T] {}
defined class A
scala> class B {}
defined class B
scala> object C extends A[B] {}
defined object C
scala> def method(arg: A[Any]): Unit = {}
method: (arg: A[Any])Unit
scala> method(C)
<console>:14: error: type mismatch;
fo
我试着这样定义一个简单的特征:
scala> trait T { def p[A,B]: Map[A,B] }
defined trait T
scala> new T { def p = Map(0 -> 1) }
<console>:7: error: object creation impossible, since method p in trait T of type [A,B]Map[A,B] is not defined
new T { def p = Map(0 -> 1) }
^
怎么会这样?
谢谢
我无法找到正确的使用RegisterAllOpenGeneric的方法
我有以下简单的定义:
public interface ISubscribeTo<T> { }
public class AnEventOf<T> { }
public interface IMarker { }
public class PocoB : IMarker { }
和一个正常的Subscriber
public class SubscribeToPocoB : ISubscribeTo<AnEventOf<PocoB>>
{
}
在此代码中注册:
privat
我需要从另一个BitSet对象(输入)创建一个新的BitSet类实例。
我以为会有像new BitSet(input)这样的东西,但没有人发现。我可以使用map()方法获得新实例,如下所示,但我认为这不是最好的解决方案。
var r = input.map(_ + 0)(BitSet.canBuildFrom)
BitSet的复制构造函数是什么?Scala中复制构造函数的一般规则是什么?
我喜欢Scala的抽象类型成员,这是一个很好的特性。
例如,考虑这个简单的示例,如在Scala中输入的那样:
scala> :paste
// Entering paste mode (ctrl-D to finish)
/** Base class for a pet food class.
*/
abstract class PetFood
/** Dog food.
*/
final class DogFood extends PetFood
/** Cat food.
*/
final class CatFood extends PetFood
/** An abs
如果这个问题的解决方案太明显或者已经在这个论坛上解决了,请原谅我(在这种情况下,请给我指出这个帖子)。
我有个课
org.personal.exercises.LengthContentsPair (l: Int, c: String)
{
val length = l
val contents = c
}
然后,在同一个源文件中,我还定义了一个隐式值,该值定义了这种类型的对象的排序方式,因此:
object LengthContentsPair {
implicit val lengthContentsPairOrdering = new Ordering [
我知道Java不允许在泛型中使用原始数据类型,例如
List<int> l = new List<int>();
是不允许的
我读过一篇相关的文章,其中说这是为了向后兼容。有人能解释为什么不允许在泛型中使用原语来保持向后兼容性吗?我非常希望能举个例子作一个小小的解释。
一个子问题:泛型在java中实现的主要/次要缺点是什么。
您的答复将不胜感激。
当我尝试用Scala参数化类型重写java泛型函数名时,我得到了错误-方法读取有不兼容的类型。
这是我试图覆盖的java抽象函数。
public abstract class SRType{
//Other abstract functions
public abstract <T> T read()throws IOException;
}
我在scala中以如下方式使用这个抽象类:
abstract class SRType(val name: String) extends org.xyz.SRType {
// to convert to
编辑:此问题似乎已在Scala2.9.1中得到解决
考虑到以下现有Java库(简化):
public interface IFace<T> {}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Anno {
Class<? extends IFace> value();
}
库中有一些方法,这些方法期望用户定义的界面包含一个或多个带有@Anno注释的方法。
我正在探索将现有代码从Java转换为Scala。现有的代码库包含IFace的实现。
p
public interface Pair<K, V>{
K getKey();
V getValue();
}
public class OrderedPair<K, V> implements Pair<K, V>{
private K key;
private V value;
OrderedPair(K k, V v){
key = k;
value = v;
}
public K getKey(){
return key;
}
public V getValue(){
re
最近,我读了一段对我来说很奇怪的代码。正如我们所知道的,当我们需要使用它们时,我们需要初始化集合中的泛型类型。另外,我们知道集合可以包含集合作为它们的元素。
守则:
public class Solution {
public static void main(String args[]) {
ArrayList res = returnlist();
System.out.print(res.get(0));
}
public static ArrayList<ArrayList<Integer>> returnlist() {
ArrayLi
我只是想知道Scala泛型的实现细节。在C#中,可以将类声明为:
class Foo<T1>{}
class Foo<T1, T2>{}
然而,在Scala中,同样的事情必须声明为
class Foo0[T1]{}
class Foo1[T1, T2]{}
注意多个泛型参数的类名是如何被强制更改的。有没有什么原因让Scala决定走这条路而不是我觉得更优雅的C#呢?我知道这可能是一个相当小的吹毛求疵,但我很好奇其中的原因。
我有一个C#类定义如下:
public class GenericItem<T>
{
public List<T> Items { get; set; }
public DateTime TimeStamp { get; set; }
}
我正在我的服务器上创建这个类的实例。然后,我试图通过WCF服务通过线路传递它,如下所示:
[OperationContract]
public GenericItem<MyCustomType> GetResult()
{
GenericItem<MyCustomType> result = B