我试图在Java中连接字符串.为什么这不起作用?
public class StackOverflowTest {
public static void main(String args[]) {
int theNumber = 42;
System.out.println("Your number is " . theNumber . "!");
}
}
Run Code Online (Sandbox Code Playgroud) 我遇到过使用方法引用但没有使用lambdas的问题.该代码如下:
(Comparator<ObjectNode> & Serializable) SOME_COMPARATOR::compare
Run Code Online (Sandbox Code Playgroud)
或者,与lambda,
(Comparator<ObjectNode> & Serializable) (a, b) -> SOME_COMPARATOR.compare(a, b)
Run Code Online (Sandbox Code Playgroud)
从语义上讲,它是完全相同的,但实际上它是不同的,因为在第一种情况下,我在其中一个Java序列化类中得到一个异常.我的问题不是关于这个例外,因为实际的代码是在一个更复杂的上下文中运行的,这个上下文已经被证明在序列化方面有奇怪的行为,所以如果我提供更多的细节,它会让它太难以回答.
我想要了解的是这两种创建lambda表达式的方法之间的区别.
描述:
我试图从类中测试静态方法.我使用powerMock(1.6.2)+ mockito(1.10.19)与Junit4(4.12)和java8一起进行模拟.
问题:
获取错误:"无法使用名称com.gs.ops.domain.StaticClass转换类原因:java.io.IOException:无效的常量类型:18"
解决方案:
谷歌搜索线程与powermock问题 - mockito和java-8
从powermock中排除了java协助,并添加了java协助3.19.0-GA
试过不同版本的powermock(1.5.4,1.6.2 ......)
下面是异常堆栈跟踪:
java.lang.IllegalStateException: Failed to transform class with name com.StaticClass. Reason: java.io.IOException: invalid constant type: 18
at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:266)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:180)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:68)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:340)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:145)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:40)
at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:244)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:61)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.<init>(AbstractCommonPowerMockRunner.java:32)
at org.powermock.modules.junit4.PowerMockRunner.<init>(PowerMockRunner.java:34)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
Caused by: java.lang.RuntimeException: java.io.IOException: invalid …Run Code Online (Sandbox Code Playgroud) ThreadLocal出于好奇,我一直在看JDK 中的实现,我发现了这个:
/**
* Increment i modulo len.
*/
private static int nextIndex(int i, int len) {
return ((i + 1 < len) ? i + 1 : 0);
}
Run Code Online (Sandbox Code Playgroud)
看起来很明显,这可以用一个简单的实现return (i + 1) % len,但我认为这些人知道他们的东西.知道为什么他们这样做了吗?
这段代码高度针对性能,使用自定义映射来保存线程局部映射,弱引用以帮助GC变得聪明等等,所以我想这是性能问题.Java模数是否缓慢?
我正在阅读有关varargs堆污染的内容,我并不真正了解varargs或non-reifiable类型将如何解决那些在没有通用性的情况下尚未存在的问题.的确,我可以很容易地取代
public static void faultyMethod(List<String>... l) {
Object[] objectArray = l; // Valid
objectArray[0] = Arrays.asList(42);
String s = l[0].get(0); // ClassCastException thrown here
}
Run Code Online (Sandbox Code Playgroud)
同
public static void faultyMethod(String... l) {
Object[] objectArray = l; // Valid
objectArray[0] = 42; // ArrayStoreException thrown here
String s = l[0];
}
Run Code Online (Sandbox Code Playgroud)
第二个只是使用数组的协方差,这实际上是问题所在.(即使List<String>是可以恢复的,我想它仍然是子类,Object我仍然可以将任何对象分配给数组.)当然我可以看到两者之间有一点差别,但是这个代码是错误的,无论是是否使用泛型.
它们对堆污染的意义是什么(它让我考虑内存使用情况,但他们谈到的唯一问题是潜在的类型不安全),它与使用数组协方差的任何类型违规有何不同?
我是小胡子的新手,并想知道如何HashMap使用胡子迭代这个Map
Map mapA = new HashMap();
mapA.put("key1", "element 1");
mapA.put("key2", "element 2");
mapA.put("key3", "element 3");
Run Code Online (Sandbox Code Playgroud)
地图键名称各不相同.理想情况下,我希望小胡子迭代它的键和值.所以在java中它看起来像这样:
for (Map.Entry<String, Object> entry : mapA.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// ...
}
Run Code Online (Sandbox Code Playgroud)
所以有人可以告诉我如何在小胡子上面实现.我的意思是模板怎么样?我试过这个模板但到目前为止没有运气:(
{{#mapA}}
<li>{{key}}</li>
<li>{{value}}</li>
{{/mapA>
Run Code Online (Sandbox Code Playgroud)
所以当我运行这个模板时,输出<li>标签是空的,为什么?谢谢.
我正在安装android studio,但是当程序启动时我遇到了这个问题:
错误:(1,0)您的项目路径包含非ASCII字符.这很可能会导致Windows上的构建失败.请将项目移动到其他目录.有关详细信息,请参见http://b.android.com/95744.
可以使用命令行标志-Dcom.android.build.gradle.overridePathCheck = true或将"com.android.build.gradle.overridePathCheck = true"行添加到项目目录中的gradle.properties文件来禁用此警告.
我刚刚从Java代码中使用Scala代码生成的字节码时,我发现Scala范围很奇怪.请考虑使用Spark(Spark 1.4,Hadoop 2.6)的以下代码段:
import java.util.Arrays;
import java.util.List;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.broadcast.Broadcast;
public class Test {
public static void main(String[] args) {
JavaSparkContext sc =
new JavaSparkContext(new SparkConf()
.setMaster("local[*]")
.setAppName("test"));
Broadcast<List<Integer>> broadcast = sc.broadcast(Arrays.asList(1, 2, 3));
broadcast.destroy(true);
// fails with java.io.IOException: org.apache.spark.SparkException:
// Attempted to use Broadcast(0) after it was destroyed
sc.parallelize(Arrays.asList("task1", "task2"), 2)
.foreach(x -> System.out.println(broadcast.getValue()));
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码失败了,这是因为我Broadcast在使用它之前自愿销毁它,但问题是在我的心理模型中它甚至不应该编译,更不用说运行正常了.
事实上,Broadcast.destroy(Boolean)声明是private[spark]这样,它不应该从我的代码可见.我会尝试查看字节码,Broadcast但这不是我的专长,这就是我更喜欢发布这个问题的原因.另外,抱歉,我太懒了,不能创建一个不依赖Spark的例子,但至少你明白了.请注意,我可以使用Spark的各种package-private方法,它不仅仅是Broadcast.
知道发生了什么事吗?
我喜欢隐含的定义.它们使代码看起来很好,它们使用户觉得某些特性在类只是一个隐式定义时自然可用.然而,我在考虑JS原型,你可以基本上在你没写的类上定义一个方法.但是如果在下一个版本中,这个类定义了一个具有相同签名的方法并对其行为做出假设,那么你就搞砸了.
Scala的含义使得几乎完全相同,只有一个主要区别:隐式定义是作用域的,因此类的作者不会有通过其他人的代码中的隐式定义注入代码的风险.但是用户的代码怎么样?是否可以保护他免受课堂上的变化?
我们考虑一下这段代码:
class HeyMan {
def hello = println("Hello")
}
object Main extends App {
val heyMan = new HeyMan
implicit class ImplicitHeyMan(heyMan: HeyMan) {
def hello = println("What's up ?")
}
heyMan.hello // prints Hello
}
Run Code Online (Sandbox Code Playgroud)
很糟糕,不是吗?对我来说,正确的行为应该是隐式定义总是隐藏真实定义,以便保护用户代码免受他所调用的API中新方法的出现.
你怎么看 ?有没有办法让它安全或者我们应该停止使用这种方式吗?
我已阅读以下文档(https://developer.github.com/v3/repos/#list-contributors)列出我所参与的存储库中的贡献者,我可以看到一个人多次提交不会看来,我自己只有3个贡献,而我推动了大部分的301次提交.
我真的没有得到这个终点返回的东西,但它看起来不准确.该文档对此并不十分详细,是否有人知道可以解释它的内容?