小编hal*_*arp的帖子

Scala实例变量的最佳实践

如何将以下Java代码转换为Scala?

class ClassA {
    private int field1;
    private int field2;

    public ClassA() {
        field1 = 1;
        field2 = 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以看到两个选项:

class ClassA(val field1: Int, val field2: Int) {
   ....
}
Run Code Online (Sandbox Code Playgroud)

要么

class ClassA {
   val field1: Int = 1
   val field2: Int = 2
}
Run Code Online (Sandbox Code Playgroud)

推荐什么,为什么?

scala

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

Java"太多常量"JVM错误

我正在开发一个在运行时生成和编译类的应用程序.这有时会产生大量生成的代码.

在我们的一个测试用例中,我从JVM收到错误:

TestClass.java:83865: too many constants
Run Code Online (Sandbox Code Playgroud)

只是这个.我已经看到有关类似错误的其他报告,但在这些情况下,错误消息抱怨常量池.但在这种情况下它没有.

如果这意味着达到了JVM常量池的限制,那意味着什么?我的意思是,在Java代码方面,这些常量是什么?班级方法?场?文字?我没有静态或最终方法也没有字段.

你能给我一些线索吗?

编辑:

将代码拆分为多个类已经按计划进行.虽然不是出于这个原因.

我意识到恒定池的局限性,我怀疑的正是这个问题.生成的代码不超过10000个方法+字段.

我怀疑的是文字是否也会进入常数池,因为这是我看到将这个数字提高到65K的唯一原因.看来是这样.

java jvm

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

在Java中停止循环线程

我正在使用一个不断从队列中读取的线程.

就像是:

public void run() {
    Object obj;
    while(true) {
        synchronized(objectsQueue) {
            if(objectesQueue.isEmpty()) {
                try {
                    objectesQueue.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                obj = objectesQueue.poll();
            }
        }

        // Do something with the Object obj
    }
}
Run Code Online (Sandbox Code Playgroud)

停止此线程的最佳方法是什么?

我看到两个选择:

1 - 由于Thread.stop()不推荐使用,我可以实现一个stopThisThread()使用原子检查条件变量的方法.

2 - 将死亡事件对象或类似内容发送到队列.当线程获取死亡事件时,它将退出.

我更喜欢第一种方式,但是,我不知道何时调用该stopThisThread()方法,因为它可能会出现在队列中,并且停止信号可以首先到达(不可取).

有什么建议?

java multithreading

7
推荐指数
1
解决办法
8795
查看次数

将Java数组传递给Scala

虽然我已经使用Scala一段时间并且之前已经将它与Java混合,但我碰到了一个问题.

如何将Java数组传递给Scala?我知道反过来相当简单.Java to Scala并非如此.

我应该在Scala中声明我的方法吗?

这是我想要实现的一个小例子:

斯卡拉:

def sumArray(ar: Array[Int]) = ...
Run Code Online (Sandbox Code Playgroud)

Java的:

RandomScalaClassName.sumArray(new int[]{1,2,3});
Run Code Online (Sandbox Code Playgroud)

这可能吗?

java scala scala-2.8

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

Java通用接口性能

简单的问题,但我猜是棘手的答案.

使用通用接口会损害性能吗?

例:

public interface Stuff<T> {

    void hello(T var);
}

vs

public interface Stuff {

    void hello(Integer var);  <---- Integer used just as an example
}
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是,它没有.泛型只是语言的一部分,编译器会优化它,好像没有泛型(至少在通用接口的这种特殊情况下).

它是否正确?

java generics performance interface

6
推荐指数
2
解决办法
1970
查看次数

Java动态代码生成,支持泛型

是否有任何工具可以提供Java动态代码生成并且还支持泛型?

例如,Javassist是我需要的工具,但它不支持泛型.

我写了一个使用Java 6 Compiler API的小型lib,但据我所知它依赖于JDK.有没有办法指定另一个编译器?或者只向我的应用程序提供我需要使用Java Compiler API调用的部分?

java java-api dynamic-code java-compiler-api

6
推荐指数
1
解决办法
2440
查看次数

在Linux上没有生成JVM hs_err.log

我目前正在开发一些Java应用程序的问题.即JVM崩溃了一个段错误.我正在尝试找到hs_err.log文件,该文件应包含有关该问题的一些有用信息.

但是,我找不到这个文件.我用过find,locate等等,什么都没用.

关于为什么没有生成日志文件的任何想法?

java linux hs-err

4
推荐指数
1
解决办法
7210
查看次数

Gnuplot 4.4和TikZ的问题

我正在使用Gnuplot 4.4,使用Lua支持编译.据说它有tikz终端.

我使用"set terminal tikz"成功地将我的gnuplots编译为tex.但是,将此源添加到我的latex文档时,我不断收到以下错误:

!包pgfkeys错误:我不知道键'/ tikz/gnuplot',我将忽略它.也许你拼错了它.

我在原始tex文档中包含了tikz包.有任何想法吗?

编辑:解决了.见下面的答案.

latex gnuplot tikz

4
推荐指数
1
解决办法
6502
查看次数

Javassist与比赛 Java编译器API

在我正在进行的项目中,我需要在运行时生成Java类.我稍后在使用这些类时还需要避免使用反射.

我一直在寻找目前的解决方案,并找到了Javassist和Java 6 Java Compiler API.

我很困惑:

  1. Javassist用什么来生成类?它是否使用反射或其他东西?

  2. 我编写了一些测试,发现很容易从源代码生成字节码,然后从生成的字节码加载类.使用Javassist相对于此解决方案有什么好处?

java compiler-construction api javassist apache-commons-jci

4
推荐指数
1
解决办法
1418
查看次数

Scala LinkedHashMap.toMap保留顺序?

正如标题所述,将LinkedHashMap转换为Map是否保留了元素的存储顺序?

我不相信,但找不到任何证据.

或者,Scala中是否存在任何不可变Map的实现,它保留了插入元素的顺序?

scala

4
推荐指数
2
解决办法
5169
查看次数

使用 Guice 注入特定实例

我在使用 Guice 注入特定字段实例时遇到了一些问题。

这是我目前拥有的:

class Driver {
   private ThreadLocal<Database> db;

   ...
}
Run Code Online (Sandbox Code Playgroud)

我通常只是在构造函数中传递 db 实例。但是这个类会被拦截,使用guice。

这是模块:

 class MyGuiceModule extends AbstractModule {

    private ThreadLocal<Database> dbToInject;

    public MyGuiceModule(ThreadLocal<Database> dbToInject) {
         this.dbToInject = dbToInject;
    }

    @Override
    protected void configure() {

         // Binds the interceptor.
         bindInterceptor(....);

         bind(ThreadLocal.class).toInstance(this.dbToInject);
    }
 }
Run Code Online (Sandbox Code Playgroud)

这是我实例化所有内容的方式:

Injector injector = new Injector(new MyGuiceModule(db));
Driver driver = injector.getInstance(Driver.class);
Run Code Online (Sandbox Code Playgroud)

我敢打赌这很明显,但我在这里做错了什么?

编辑:

对不起,如果我不清楚。我的问题是这不起作用。未注入实例。我已经用@Inject 注释了该字段,但仍然不起作用。

java dependency-injection guice

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

带有WrappedArray参数的Scala案例类构造函数

我有以下场景:

sealed abstract class Type(val inUse: Boolean)

case class IntTy(override val inUse: Boolean) extends Type(inUse)

case class TupleTy(override val inUse: Boolean, elems: Type*) extends Type(inUse) {
  def this(elems: Type*) = this(false, elems:_*)
}
Run Code Online (Sandbox Code Playgroud)

在Scala 2.8.0中这很好用,我可以创建一个新的TupleTy实例:

TupleTy(IntTy(false))
Run Code Online (Sandbox Code Playgroud)

但是,我刚刚更新到Scala 2.9.1 final,它不再有效.我现在收到以下错误:

error: type mismatch;
found   : IntTy
required: Boolean
              TupleTy(IntTy(false))
                           ^
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我错过了某些东西?

scala scala-2.8 scala-2.9

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