小编soc*_*soc的帖子

为什么java.lang.Integer和java.lang.Double的最小上限被推断为非循环类型?

考虑以下代码:

val foo = if(true) 
            new java.lang.Double(4) 
          else
            new java.lang.Integer(4)
Run Code Online (Sandbox Code Playgroud)

推断类型foo是:

Number with Comparable[_ >: Double with Integer <: Number with 
  Comparable[_ >: Double with Integer <: Number]]
Run Code Online (Sandbox Code Playgroud)

所以基本上编译器在第三次递归后在边界和中止上循环.

以下为什么不够?

Number with Comparable[_ >: Double with Integer <: Number]
Run Code Online (Sandbox Code Playgroud)

generics types scala type-inference

16
推荐指数
1
解决办法
1013
查看次数

什么是Scala未来的平台问题,人们应该做好准备?

目前,Scala仅在JVM上运行,并且CLR的实现过时.

但目前有一些声音,微软有兴趣为.NET提供最新的Scala端口.

考虑到Oracle方面缺乏任何计划或监督如何处理Java/JVM /生态系统,Scala开发人员如何做好准备,最终可能没有合适的平台来运行Scala?

是否有计划在未来对Scala VM进行一些"独立"实现,将Scala的功能映射到某些字节码/ VM,而不是必须在当前VM实现中使用所有这些遗留错误(没有泛型,协变数组,奇怪的注释,没有尾调用等)?

.net java jvm scala llvm

15
推荐指数
3
解决办法
1335
查看次数

Scala的单身人士对序列化有哪些保证?

默认情况下是否安全,例如Java的单元素枚举模式,或者是否需要在readResolve某处定义或类似的方法来防止单一合同的意外或恶意破坏?

java singleton serialization scala language-design

15
推荐指数
1
解决办法
608
查看次数

是否应该在equals和hashCode中考虑JPA实体的id字段?

我在使用JPA2和EclipseLink编写数据库应用程序的测试时遇到了问题:

我将一些实体添加到数据库中,稍后检索它并希望将其与具有我期望确认添加按预期工作的值的实例进行比较.

首先我写了类似的东西

assertEquals(expResult, dbResult);
Run Code Online (Sandbox Code Playgroud)

失败了,因为我真的不知道id数据库生成的字段的值,因此dbResult不同于expResult我创建new和手动填充的字段.

我看到两个选择:

  • 要么我id从中移除字段equals,hashCode以便比较仅基于"实际值".不过,我不知道这是否会导致数据库或其他地方出现问题.

  • 或者我编写测试以明确检查除id手动之外的每个字段.

我该怎么办?

java persistence jpa equals eclipselink

15
推荐指数
3
解决办法
3283
查看次数

如何在不先映射它们的情况下对集合元素的字段求和(如foldLeft/reduceLeft)?

考虑这个课程:

 case class Person(val firstName: String, val lastName: String, age: Int)
 val persons = Person("Jane", "Doe", 42) :: Person("John", "Doe", 45) :: 
               Person("Joe", "Doe", 43) :: Person("Doug", "Don", 65) :: 
               Person("Darius", "Don", 24) :: Person("Dora", "Don", 20) :: 
               Person("Dane", "Dons", 29) :: Nil
Run Code Online (Sandbox Code Playgroud)

为了得到所有人的年龄总和,我可以编写如下代码:

persons.foldLeft(0)(_ + _.age)
Run Code Online (Sandbox Code Playgroud)

但是如果我想使用sum,我需要先映射该值,代码如下所示:

persons.map(_.age).sum
Run Code Online (Sandbox Code Playgroud)

如何在创建某些中间集合的情况下使用该sum方法?

(我知道这样的"优化"很可能在没有在紧密循环中运行时没有任何真正的性能差异,而且我也知道懒惰的视图等等.)

是否有可能像这样的代码

persons.sum(_.age)
Run Code Online (Sandbox Code Playgroud)

做什么foldLeft/ 做什么reduceLeft

collections scala mapreduce sum higher-order-functions

14
推荐指数
2
解决办法
1万
查看次数

抽象类中辅助构造函数的用例是什么?

考虑以下代码:

abstract class Foo(val s: String) {
  def this(i: Int) = this("" + (i+2))
}
Run Code Online (Sandbox Code Playgroud)

据我所知,构造函数不是继承的,并且不能使用super类似Java的子类调用辅助构造函数.

它们只是一个无用的工件还是有一些合理的用例?

constructor abstract-class scala language-design

14
推荐指数
2
解决办法
1804
查看次数

由于扩展的递归类型参数,类图的编译器错误不是有限的

有了这段代码:

trait B[T]
trait C[T]
class A[T] extends B[A[C[T]]]
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

error: class graph is not finitary because type parameter T is expansively recursive
       class A[T] extends B[A[C[T]]]
               ^
Run Code Online (Sandbox Code Playgroud)

有人可以解释错误消息的内容,为什么T无限递归以及为什么以下代码有效?

class A[T] extends B[A[T]]
Run Code Online (Sandbox Code Playgroud)

compiler-construction inheritance types scala language-design

14
推荐指数
1
解决办法
393
查看次数

我如何将scala setter方法'myvar_ $ eq(myval)'别名为在java中更令人满意的东西?

我最近将一些代码从java转换为scala,试图自学语言.

假设我们有这个scala类:

class Person() {
  var name:String = "joebob"
}
Run Code Online (Sandbox Code Playgroud)

现在我想从java访问它,所以我不能像我在scala那样使用点符号.

所以我可以通过发出以下内容来获取我的var的内容:

person = Person.new();
System.out.println(person.name());
Run Code Online (Sandbox Code Playgroud)

并通过以下方式设置:

person = Person.new();
person.name_$eq("sallysue");
System.out.println(person.name());
Run Code Online (Sandbox Code Playgroud)

这是正确的,因为我们的Person类在javap中看起来像这样:

Compiled from "Person.scala"
public class Person extends java.lang.Object implements scala.ScalaObject{
    public Person();
    public void name_$eq(java.lang.String);
    public java.lang.String name();
}
Run Code Online (Sandbox Code Playgroud)

是的,我可以编写自己的getter/setter但是我讨厌用这个来填充类,考虑到我已经拥有它们并没有多大意义 - 我只想更好地为_ $ eq方法添加别名.(当你处理像antlr这样的东西时,这实际上会变得更糟,因为那时你必须逃避它,它最终看起来像person.name _\$ eq("newname");

注意:我宁愿忍受这个,而不是用更多的setter方法填充我的类.

那么在这种情况下你会做什么?

java setter scala javap scalac

13
推荐指数
1
解决办法
1173
查看次数

Java开发GUI的未来?

考虑到这一点

  • Sun/Oracle决定在他们"发明"JavaFX之后不再开发Swing
  • JavaFX并没有真正起作用,有些人认为它已经失败了
  • SWT并不是真正独立于平台的特性,处理GUI元素的手动任务以及捆绑特定于平台的库的必要性

还有另一条出路吗?

如果我想在JVM上进行GUI开发

  • 有一个很好的API(Swing和SWT也不错,但它们也不是很好.)
  • 哪种"感觉"响应(尽管声称这已经解决了,但今天Swing和SWT仍然存在问题.)
  • 在几年内不会过时的,我应该做出什么决定?

是否有可用的第三种选择或未来可能有一种选择?

一个选项

  • 快速响应(Not Swing的意识形态"如果它不快,那是开发人员的错")
  • 具有原生外观和感觉
  • 使用在所有平台上运行的单个库

这是现实的吗?

谢谢!

=========

澄清:如果我必须在JVM上启动一个新的软件项目,有几个现有的选项,如使用SWT或Swing,使用Swing与第三方库,如SwingX,JIDE,JGoodies,Flamingo或使用Netbeans Platform等应用程序框架或Eclipse RCP.是否有支持/建议的方法可以减轻通常与Java GUI开发相关的痛苦?

java api user-interface swing swt

13
推荐指数
2
解决办法
1万
查看次数

是否有计划支持Scala的SIQ(ScalaIntegratedQuery)的"类型提供者",就像在F#中一样?

SIQ的当前状态是呈现在由克里斯托弗·沃格特2011 ScalaDays.它显示的查询是如何工作的,看起来像,但据我记得有没有关于这些类型将如何来表示,例如,如果它仍然需要编写样板代码来解释数据库结构Scala的概念.

F#3.0增加键入提供商(PDC谈话由Don赛姆:视频 ; GOTO哥本哈根谈话由Tomas Petricek:视频,幻灯片,博客文章),这使得它基本上不需要手动编写或生成(另一数据提供者或)一个DB之间的映射和语言/类型系统,因为语言可以直接使用类型提供程序从数据库本身查询结构信息.

ScalaIntegratedQuery是否能够向Scala编译器提供数据库的类型/关系,而无需用户自己编写样板代码?

database f# scala scalaquery type-providers

13
推荐指数
1
解决办法
829
查看次数