小编Seb*_*ber的帖子

使用Either处理故障 - >堆栈跟踪在哪里?

我从一些人那里听说,在Scala中,我们倾向于(像其他函数式语言一样)不打破控制流...相反,按惯例,我们返回错误Either Left.

但是我们如何从这个例外中得到stracktrace呢?现在我在左边返回一个Error带有代码,消息和原因的简单案例类(Error也是).但如果我有错误,我无法获得堆栈跟踪.如果我的应用程序变得复杂,可能很难找到返回的代码块Error......根本原因是必不可少的.


那么我们在实践中做了什么?

我应该返回,而不是自定义Error,java类型ExceptionThrowable我的Left?在不丢失堆栈跟踪和原因等重要信息的情况下,Scala异常处理的最佳实践是什么?

java scala exception-handling exception either

9
推荐指数
1
解决办法
720
查看次数

无法使用Cordova/Phonegap helloworld服务

我已经安装的Android SDK + ANT +科尔多瓦(3.4.1)+设置PATH变量(android,ant,cordova命令可用)

在cordova CLI的最后,有这样的例子:

Example usage

    $ cordova create Baz
    $ cd Baz
    $ cordova platform add android
    $ cordova build
    $ cordova serve android
Run Code Online (Sandbox Code Playgroud)

-----------------------------------

所以我尝试了这个例子:

sebastien@sebastien-xps:Desktop$ cordova create Baz
Creating a new cordova project with name "HelloCordova" and id "io.cordova.hellocordova" at location "/home/sebastien/Desktop/Baz"
Run Code Online (Sandbox Code Playgroud)
sebastien@sebastien-xps:Desktop$ cd Baz
Run Code Online (Sandbox Code Playgroud)
sebastien@sebastien-xps:Baz$ cordova platform add android
Creating android project...
Creating Cordova project for the Android platform:
    Path: platforms/android
    Package: io.cordova.hellocordova
    Name: HelloCordova
    Android target: …
Run Code Online (Sandbox Code Playgroud)

android cordova

9
推荐指数
3
解决办法
9440
查看次数

方法参数:解构+保存原始参数(ReactJS组件)

有没有办法实现方法参数解构,但也能得到方法参数.

在具有无状态组件的React应用程序的上下文中,我希望能够替换

const MyComponent = (props) => {
  const {prop1, prop2} = props;
  return (
    <div className={prop1 + '-' + prop2}>
      <Child {...props}/>
    </div>
  ) 
}
Run Code Online (Sandbox Code Playgroud)

用更简洁的语法

const MyComponent = (props: {prop1, prop2}) (
  <div className={prop1 + '-' + prop2}>
    <Child {...props}/>
  </div>
) 
Run Code Online (Sandbox Code Playgroud)

有没有这样的语法?

javascript destructuring ecmascript-6 reactjs

9
推荐指数
1
解决办法
810
查看次数

单身人士,Enums和匿名内部课程

您可能知道,有些人使用Enum of 1实例声明单例,因为JVM保证总是会有一个没有并发问题的实例来处理...

那么具有多个实例的枚举呢?我们可以说像Enum这样的东西是一种有序的单身人士共享一个共同的界面吗?为什么?

public enum EnumPriceType {

    WITH_TAXES {
        @Override
        public float getPrice(float input) {
            return input*1.20f;
        }
        public String getFormattedPrice(float input) {
            return input*1.20f + " €";
        }
        },

    WITHOUT_TAXES {
        @Override
        public float getPrice(float input) {
            return input;
        }
    },
    ;

    public abstract float getPrice(float input);

    public static void main(String[] args) {
        WITH_TAXES.getFormattedPrice(33f);
    }

}
Run Code Online (Sandbox Code Playgroud)

在此代码中,为什么这不起作用:WITH_TAXES.getFormattedPrice(33f); 如果不通过公共接口无法调用公共方法,那么声明公共方法的兴趣是什么?我想这就是为什么我没有看到任何语法能够为Enum的一个实例声明一个接口.


编辑:

似乎枚举实例是一种特殊的匿名类.因此,我理解为什么你不能称之为该方法.

我的问题有点与:为什么匿名类不能实现一个接口(除了它可能已经实现的接口!)

我完全理解为什么我们不能这样做:

Vehicle veh = new Vehicle() {
    public String getName() {
        return "toto";
    }
}; …
Run Code Online (Sandbox Code Playgroud)

java enums scjp anonymous-class java-ee

8
推荐指数
1
解决办法
3245
查看次数

在休眠批量更新后,清除会话,刷新,刷新?

我们知道,在使用hibernate对数据库进行批量更新时(即使在HQL中),所做的更改不会复制到当前会话中存储的实体.

所以我可以调用session.refresh来加载我的会话实体的修改.

我们经常调用flush来将修改发送到DB,但文档说它"同步"会话和db ...

这是否意味着flush能够为我的会话实体设置好的新db值?或者flush会最终使用存储在实体中的旧数据库擦除我的新数据库值?(顺便说一句,如果hibernate的行为是第一个,它如何检测哪一个是"好的价值"?).

如果我不能在这种情况下使用flush,最好在每次批量更新后清除会话,以便我们确保在会话中有良好的值?

java orm hibernate jpa java-ee

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

具有弱/软使用的Guava CacheBuilder或MapMaker

我不习惯处理Java中的Soft和Weak引用,但我理解这个原理,因为我习惯于处理像Gemfire这样的数据网格,它在内存已满时提供溢出到hdd功能,可能使用软引用或类似的东西我猜测.

在番石榴中我不明白的是它提供了使键变软/弱的方法,以及值软/弱的方法.

我只是想知道用非软值创建软键的例子是什么意思?我的意思是,当开始收集软引用时,我们无法通过其键找到条目,那么为什么我们希望这些值保留在地图中?

有人可以给我们一些用例:

  • 弱键/软值
  • 弱键/正​​常值
  • 软键/弱值
  • 软键/正常值

谢谢


编辑 我不确定我的问题是否足够精确,所以我想知道的是:

  • 收集密钥(弱/软)时,该值会发生什么变化(非弱/软)
  • 当收集一个值(弱/软)时,密钥会发生什么
  • 具有缺失部分(键或值)的条目是否保留在缓存中?
  • 当您希望此类条目保留在缓存中时,是否有任何用例?

编辑: 正如Kevin Bourillon的回答所讨论的,最后我想我明白为什么使用软键并不意味着什么.原因如下:

static class KeyHolder {
    final private String key;
    public KeyHolder(String key) {
        this.key = key;
    }
    public String getKey() {
        return key;
    }
    @Override
    public boolean equals(Object o) {
        KeyHolder that = (KeyHolder)o;
        boolean equality = this.getKey().equals(that.getKey());
        return equality;
    }
    @Override
    public int hashCode() {
        return key != null ? key.hashCode() : 0;
    }
    @Override
    public String toString() {
        return "KeyHolder{" + …
Run Code Online (Sandbox Code Playgroud)

java caching guava

8
推荐指数
1
解决办法
5007
查看次数

安装具有依赖关系的jar到maven存储库(Android gcm-server推送库)

我正在开发一个工业化的大型maven项目,在应用程序模块上,我需要能够向Android发送推送通知(使用新的Google云消息传递).

似乎谷歌提供自己的服务器端库来发送通知,并根据邮件列表,他们不提供任何maven存储库.

谷歌文档中提到的第一步是:

Copy the gcm-server.jar file from the SDK's gcm-server/dist directory to your server classpath.
Run Code Online (Sandbox Code Playgroud)

我不会这样做所以我已经将jar添加到我的本地存储库并将其添加到我们的企业Nexus.

mvn install:install-file
 -Dfile=gcm-server.jar
 -Dsources=gcm-server-sources.jar
 -DgroupId=com.google.android.gcm
 -DartifactId=gcm-server
 -Dversion=r3
 -DgeneratePom=true
 -Dpackaging=jar
Run Code Online (Sandbox Code Playgroud)

但我刚刚注意到该库有依赖(simple-json,mockito和junit).它不是精确的,如果它们是运行时或测试,但我想在运行时只使用simple-json.我想从Nexus中检索GCM依赖还应该允许检索像这个simple-json lib这样的传递依赖吗?

那我该怎么办?我应该自己创建一个我不拥有的项目的pom文件,然后将项目导入我的maven存储库-DpomFile=my-custom-pom.xml吗?

谢谢

java android push-notification maven google-cloud-messaging

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

链接方法调用Either

我想知道是否有可能创建某种"方法调用链",所有方法都返回相同的[错误,结果].

我想要做的是:连续调用所有方法,当方法返回一个Left(错误)时,然后停止方法调用并返回在调用链中找到的第一个Left.

我尝试了一些东西,包括折叠,地图,投影......但我是Scala的新手并没有找到任何优雅的解决方案.

我试过这样的事情:

def createUserAndMandatoryCategories(user: User) : Either[Error,User] = {
    User.create(user).right.map {
      Logger.info("User created")
      Category.create( Category.buildRootCategory(user) ).right.map {
        Logger.info("Root category created")
        Category.create( Category.buildInboxCategory(user) ).right.map {
          Logger.info("Inbox category created")
          Category.create( Category.buildPeopleCategory(user) ).right.map {
            Logger.info("People category created")
            Category.create( Category.buildTrashCategory(user) ).right.map {
              Logger.info("Trash category created")
              Logger.info("All categories successfully created created")
              Right(user)
            }
          }
        }
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

但它不起作用.无论如何,我真的不喜欢它所需的缩进.此外我想将Error转换为描述问题的新String(我想我应该使用fold?)

我正在寻找像这样写的东西:

val result : Either[String,CallResult] = call1.something("error 1 description")
.call2.something("error 2 description")
.call3.something("error 3 description")
.call4.something("error 4 description")
Run Code Online (Sandbox Code Playgroud)

是不是可以用Scala做这样的事情?也许同时使用Either和Option?

一个限制也是如果第一次调用失败,则不应该进行其他调用.我不想要一个解决方案,我称之为一切,然后加入eithers.

谢谢!

monads functional-programming scala either

8
推荐指数
2
解决办法
2697
查看次数

为什么在映射操作后将Range转换为Vector?

继Coursera上的Scala课程后,Martin Odersky展示了一个示例代码:

1 to 5 map ( i => i*i )
Run Code Online (Sandbox Code Playgroud)

并且他说Range变换为a Vector因为它们共享相同的接口(IndexedSeq)并且结果不能表示为a Range (在它的示例中更清楚,因为他生成了一对不能表示为a的对Range).

我不确定理解,因为我认为他之前说过,在for表达式中,第一个生成器将决定将要生成的元素的种类,并且它似乎并不总是如此,至少对于Range.

而且我不确定为什么输出是Vector,因为Vector可能不是唯一可以表示上面计算结果的其他实现.

有人可以帮我理解这部分吗?

scala scala-collections

8
推荐指数
1
解决办法
1234
查看次数

Scala 2.10宏与Java中可用的宏相比

我不太了解这个领域.

有人可以解释Scala 2.10中使用宏的可能性,与使用编译预处理器的Java以及CGLIB,ASM,Byteman等工具相比可以解释什么?

java macros scala scala-2.10

8
推荐指数
1
解决办法
913
查看次数