我怎么能写一个相当于的lambda表达式:
def x():
raise Exception()
Run Code Online (Sandbox Code Playgroud)
以下是不允许的:
y = lambda : raise Exception()
Run Code Online (Sandbox Code Playgroud) 我想将常量用于注释值.
interface Client {
@Retention(RUNTIME)
@Target(METHOD)
@interface SomeAnnotation { String[] values(); }
interface Info {
String A = "a";
String B = "b";
String[] AB = new String[] { A, B };
}
@SomeAnnotation(values = { Info.A, Info.B })
void works();
@SomeAnnotation(values = Info.AB)
void doesNotWork();
}
Run Code Online (Sandbox Code Playgroud)
常数Info.A和Info.B可以在注释中使用,但不是数组Info.AB,因为它必须是在这个地方数组初始化.注释值仅限于可以内联到类的字节代码中的值.这对于数组常量是不可能的,因为它必须在Info加载时构造.这个问题有解决方法吗?
哪个ORM支持不可变类型的域模型?
我想写下面的类(或Scala等价物):
class A {
private final C c; //not mutable
A(B b) {
//init c
}
A doSomething(B b) {
// build a new A
}
}
Run Code Online (Sandbox Code Playgroud)
ORM必须使用构造函数初始化对象.因此可以在构造函数中检查不变量.默认构造函数和字段/ setter访问intialize是不够的,并且使类的实现变得复杂.
应支持使用集合.如果更改了集合,则应从用户角度创建副本.(渲染旧的集合状态陈旧.但用户代码仍然可以工作(或至少读取).)就像持久数据结构一样.
关于动机的一些话.假设您有一个FP风格的域对象模型.现在,您希望将其保留到数据库中.你是谁做的?你希望在纯粹的功能样式中尽可能多地做到这一点,直到邪恶的一面效果进入.如果你的域对象模型不是不可变的,你可以例如不在线程之间共享对象.您必须复制,缓存或使用锁.因此,除非您的ORM支持不可变类型,否则您在选择解决方案时受到限制.
我正在寻找一个Java工具,可以在我的测试中创建匿名变量(我不关心它的值的变量),类似于.Net中的AutoFixture.这是AutoFixture自述文件的链接,它有很好的例子.
以下是同一自述文件中的简短示例:
[TestMethod]
public void IntroductoryTest()
{
// Fixture setup
Fixture fixture = new Fixture();
int expectedNumber = fixture.CreateAnonymous<int>();
MyClass sut = fixture.CreateAnonymous<MyClass>();
// Exercise system
int result = sut.Echo(expectedNumber);
// Verify outcome
Assert.AreEqual<int>(expectedNumber, result, "Echo");
// Teardown
}
Run Code Online (Sandbox Code Playgroud)
Java世界中有这样的工具吗?
编辑:
我尝试过QuickCheck,虽然它设法做了我想要的事情:
import net.java.quickcheck.Generator;
import net.java.quickcheck.generator.PrimitiveGenerators;
import net.java.quickcheck.generator.support.ObjectGeneratorImpl;
public class Main {
interface Test{
String getTestValue();
}
public static void main(String[] args) {
Generator<String> stringGen = PrimitiveGenerators.strings(5, 100);
Generator<Integer> intGen = PrimitiveGenerators.integers(5, 20);
ObjectGeneratorImpl<Test> g = …Run Code Online (Sandbox Code Playgroud) 为Java 6注释处理器设置eclipse项目编译器配置的最佳方法是什么?
我的解决方案是手动设置org.eclipse.jdt.apt.core.prefs和factorypath文件.这有点麻烦:
(org.eclipse.jdt.apt.genSrcDir属性org.eclipse.jdt.apt.core.prefs)一个问题是eclipse生成的源将使用maven编译.只有maven clean compile可靠,因为它删除了eclipse生成的源文件.(Eclipse和javac生成的源文件可能不同步.)
有没有更好的解决方案来配置maven没有eclipse生成的源文件在maven源路径?
<project>
<properties>
<eclipse.generated.src>${project.build.directory}/eclipse</eclipse.generated.src>
</properties>
<build>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals> <goal>add-source</goal> </goals>
<configuration>
<sources>
<source>${eclipse.generated.src}</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<additionalConfig>
<file> <name>.factorypath</name>
<content><![CDATA[<factorypath>
<factorypathentry kind="VARJAR" id="M2_REPO/processor/processor.jar" enabled="true" runInBatchMode="false"/>
</factorypath>
]]> </content>
</file>
<file>
<name>.settings/org.eclipse.jdt.apt.core.prefs</name>
<content><![CDATA[
eclipse.preferences.version=1
org.eclipse.jdt.apt.aptEnabled=true
org.eclipse.jdt.apt.genSrcDir=${eclipse.generated.src}
org.eclipse.jdt.apt.reconcileEnabled=true
]]> </content>
</file>
</additionalConfig>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud) 我想在我将要教授的课程中使用Functional Java或Guava(或者不太可能使用Scala).尽管在JVM上运行了很多函数式语言,但我仍然希望看到与Java尽可能相似的东西,即在Java 8中具有的功能特性,在概念和语法上最兼容的东西. .
它看起来像Functional Java和Guava是最好的候选者.我无法在功能,易用性,概念接近直接Java等方面找到任何比较它们的东西.有没有人知道这些库之间的良好比较?
scala> val shares = Map("Apple" -> 23, "MicroSoft" -> 50, "IBM" -> 17)
shares: scala.collection.immutable.Map[java.lang.String,Int]
= Map(Apple -> 23, MicroSoft -> 50, IBM -> 17)
scala> val shareholders = shares map {_._1}
shareholders: scala.collection.immutable.Iterable[java.lang.String]
= List(Apple, MicroSoft, IBM)
scala> val newShares = shares map {case(k, v) => (k, 1.5 * v)}
newShares: scala.collection.immutable.Map[java.lang.String,Double]
= Map(Apple -> 34.5, MicroSoft -> 75.0, IBM -> 25.5)
Run Code Online (Sandbox Code Playgroud)
从这个例子看,这个map方法似乎在返回类型上重载.在返回类型上重载是不可能的?有人请解释这里发生了什么?
如何使用更改的提示启动bash子进程.使用env不起作用:
env PS1="change >" bash --login
Run Code Online (Sandbox Code Playgroud)
不起作用.结果应与启动进程后使用export相同:
$ export PS1="change >"
change >
Run Code Online (Sandbox Code Playgroud)
~/.bashrc 必须像往常一样进行评估.
有没有办法测量JVM的CPU使用率(一旦启动java应用程序)跨平台(windows + unix + mac)?我使用过Jconsole,但我需要的是一个执行此操作的java代码,而不是一个可以监视CPU利用率的工具.我试过了
ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage()
Run Code Online (Sandbox Code Playgroud)
使用JMX,但它没有帮助,因为我需要的是JVM的特定CPU使用率(比如当我启动服务器时),而不是系统负载平均值.
java ×6
annotations ×2
scala ×2
autofixture ×1
bash ×1
bug-tracking ×1
cpu-usage ×1
eclipse ×1
guava ×1
hibernate ×1
javac ×1
jmx ×1
maven-2 ×1
mocking ×1
oracle ×1
orm ×1
performance ×1
python ×1
quickcheck ×1
shell ×1
types ×1
unit-testing ×1