这是CLR的限制还是现有代码存在兼容性问题?
这与C#4.0中委托合并的混乱变化有关吗?
编辑:如果没有在CLR上运行的限制,是否可以使用使用共同/逆变的语言?
为什么所有Scala类都继承自ScalaObject尽管该特征是完全空的并且没有(可见?)功能相比AnyRef,它确实定义了其他方法?
不会减慢方法调用,equals()或者hashCode()因为它需要考虑另一个类(可能会覆盖方法)?
是不是可以将AnyRef和ScalaObject折叠成一个类?
java inheritance programming-languages scala language-design
据我所知,LINQ支持的唯一内容是Scala目前不支持其集合库,它是与SQL数据库的集成.
据我了解LINQ可以"收集"各种操作和查询到那里处理它的时候可以给"整"语句到数据库,防止一个简单的SELECT第一张全表到虚拟机的数据结构.
如果我错了,我会很乐意纠正.
如果没有,在Scala中支持相同的内容是什么?
是不是可以编写一个实现集合接口的库,但是没有任何数据结构支持它,但是一个String,它将后续集合组装到所需的Database语句中?
或者我的观察完全错了?
我想将以下代码从Java转换为Scala:
Foo foo = new Foo() { private static final long serialVersionUID = 12345L; }
Run Code Online (Sandbox Code Playgroud)
类Foo是一个抽象类.
Scala中的等效代码如何?
java serialization programming-languages scala anonymous-class
考虑以下代码:
public interface Foo extends Comparable<Foo> {}
public enum FooImpl implements Foo {}
Run Code Online (Sandbox Code Playgroud)
由于类型擦除的限制,我收到以下错误:
java.lang.Comparable不能用不同的参数继承:
<Foo>和<FooImpl>
我有以下要求:
FooImpl 需要是一个枚举,因为我需要将它用作注释中的默认值.我已经尝试在接口中使用泛型边界,但Java不支持.
考虑以下代码:
public example(String s, int i, @Foo Bar bar) {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
我想检查方法是否有注释@Foo并获取参数或如果没有@Foo找到注释则抛出异常.
我目前的方法是首先获取当前方法,然后遍历参数注释:
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
class Util {
private Method getCurrentMethod() {
try {
final StackTraceElement[] stes = Thread.currentThread().getStackTrace();
final StackTraceElement ste = stes[stes.length - 1];
final String methodName = ste.getMethodName();
final String className = ste.getClassName();
final Class<?> currentClass = Class.forName(className);
return currentClass.getDeclaredMethod(methodName);
} catch (Exception cause) {
throw new UnsupportedOperationException(cause);
}
}
private Object getArgumentFromMethodWithAnnotation(Method method, Class<?> annotation) {
final …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
public void example(String s, int i, @Foo Bar bar) {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
我对注释的参数的价值感兴趣@Foo.假设我已经通过反射(with Method#getParameterAnnotations())找出了哪个方法参数具有@Foo注释.(我知道它是参数列表的第三个参数.)
我现在如何检索bar进一步使用的值?
scala.runtime目录中的Scala源代码树中有一些*.java文件.
这些文件似乎很简单,例如DoubleRef.java看起来像这样:
package scala.runtime;
public class DoubleRef implements java.io.Serializable {
private static final long serialVersionUID = 8304402127373655534L;
public double elem;
public DoubleRef(double elem) { this.elem = elem; }
public String toString() { return java.lang.Double.toString(elem); }
}
Run Code Online (Sandbox Code Playgroud)
是否有任何理由不能在Scala中定义这些类?
考虑以下代码:
class Outer {
class Inner
}
Run Code Online (Sandbox Code Playgroud)
在Java中,可以使用以下命令创建实例Inner:
Outer.Inner inner = new Outer().new Inner();
Run Code Online (Sandbox Code Playgroud)
我知道我可以在Scala中写这个:
val outer = new Outer
val inner = new outer.Inner
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否有可能在没有任务的情况下表达相同的内容outer.
都
new Outer.new Inner
Run Code Online (Sandbox Code Playgroud)
和
new (new Outer).Inner
Run Code Online (Sandbox Code Playgroud)
编译器不接受.
有什么我想念的吗?
我已经查看了ANSI转义码,但看起来只支持下划线.
我想念一些东西还是有其他选择?
如果不可能,那么"这是否已被弃用"的含义是否相同?
java ×7
scala ×5
annotations ×2
c# ×2
class ×2
reflection ×2
ansi-escape ×1
arguments ×1
c#-4.0 ×1
clr ×1
comparable ×1
console ×1
covariance ×1
database ×1
enums ×1
generics ×1
inheritance ×1
interface ×1
linq ×1
methods ×1
parameters ×1
reference ×1
runtime ×1
scalaquery ×1
syntax ×1
terminal ×1
text ×1