soc*_*soc 2 java fonts components overriding scala
我试过了
scala> class Foo extends Component { var font = new java.awt.Font("Helvetica", java.awt.Font.BOLD, 12) }
Run Code Online (Sandbox Code Playgroud)
我得到了:
<console>:10: error: overriding variable font in class Component of type java.awt.Font;
variable font needs `override' modifier
class Foo extends Component { var font = new java.awt.Font("Helvetica", java.awt.Font.BOLD, 12) }
^
Run Code Online (Sandbox Code Playgroud)
所以我试过了
scala> class Foo extends Component { override var font = java.awt.new Font("Helvetica", java.awt.Font.BOLD, 12) }
Run Code Online (Sandbox Code Playgroud)
但这根本没有帮助:
<console>:10: error: overriding variable font in class Component of type java.awt.Font;
variable font has incompatible type
class Foo extends Component { override var font = new java.awt.Font("Helvetica", java.awt.Font.BOLD, 12) }
^
Run Code Online (Sandbox Code Playgroud)
这个错误背后的原因是什么,应该如何正确完成?
编辑:对不起,没看到scala也有Component.该Component问题是由一个java.awt.Component!
组件包含getter和setter font,因此设置字体的规范方法是:
class Foo extends Component {
font = new java.awt.Font(/* blah blah */)
}
Run Code Online (Sandbox Code Playgroud)
如果要覆盖字体defs以使用var,则必须使用兼容的东西scala.swing.Font,它包装Java字体(通常使用隐式转换完成).像这样:
class Foo extends Component {
override var font: scala.swing.Font =
new java.awt.Font("Helvetica", java.awt.Font.BOLD, 12)
}
Run Code Online (Sandbox Code Playgroud)
我不确定这会做你想要的.(编辑:在加载过多垃圾的REPL会话中进行测试;实际上你不需要这样做!简单的覆盖var font = new java.awt.Font是有效的.)普通的getter/setter旨在通过关于通过javax.swing同行的信息.如果你这样做,你可能会打破转发.所以使用第一种方法.
编辑如果您尝试在以下位置执行此操作java.awt.Component:Font font;是私有字段java.awt.Component.您无法覆盖Java中的字段,也无法对Java中的私有字段执行任何操作.因此,尝试使用新的var覆盖它将保证不起作用.(然而,编译器当然可以提供更具信息性的错误消息!)Scala只能覆盖字段,因为它们不是真正的字段 - 它们是引用隐藏的底层字段的getter/setter对.
您应该使用(或覆盖)getFont而setFont不是.
| 归档时间: |
|
| 查看次数: |
539 次 |
| 最近记录: |