使用这段非常简单的代码
import java.util.Properties
class MyProperties extends Properties
object MyProperties {
def get(): MyProperties = new MyProperties
def anotherMethod(): MyProperties = new MyProperties
}
get()
编译后的代码中缺少该方法;类的 Java 反编译MyProperties
产生(省略了 scala 签名)
import java.util.Properties;
import scala.reflect.ScalaSignature;
public class MyProperties extends Properties
{
public static MyProperties anotherMethod()
{
return MyProperties..MODULE$.anotherMethod();
}
}
但是,如果MyProperties
不扩展,则生成java.util.Properties
该get()
方法。
java.util.Properties
继承public V get(Object key)
fromjava.util.Dictionary
但这是一个具有不同签名的非静态方法。
为什么get()
生成的字节码中缺少(静态)方法?
Scala 2.10.1-rc2 - JVM 1.6.0_41
编辑 与 2.10.0 相同的问题
编辑 2 这在 java 中“有效”
import java.util.Properties;
public class MyPropertiesjava extends Properties {
private static final long serialVersionUID = 1L;
public static MyProperties get() {
return new MyProperties();
}
public static MyProperties antotherMethod() {
return new MyProperties();
}
}
编辑 3 对以下 Régis 解决方法的一个小编辑(类型不能是“全局”)
import java.util.Properties
class MyPropertiesImpl extends Properties
object MyProperties {
type MyProperties = MyPropertiesImpl
def get(): MyProperties = new MyPropertiesImpl
def anotherMethod(): MyProperties = new MyPropertiesImpl
}
编辑 Typesafe 团队在此处跟踪的 4 个问题