我运行我的测试:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyStuff.class)
public class MyStuffTest { ..whatever
Run Code Online (Sandbox Code Playgroud)
在我ZonedDateTime为该代码添加了类之后,它看起来失败并出现以下错误:
java.lang.IllegalStateException:无法转换名为MyCode的类原因:java.time.ZonedDateTime中找不到[source error] toInstant()
在我的代码的某处我有:
long longTimeNoSee = ZonedDateTime.parse(getateTimeString()).toInstant().toEpochMilli();
Run Code Online (Sandbox Code Playgroud)
我想这是一个错误powermock.但也许有人有点想法(?)
考虑以下课程:
import java.util.Objects;
import java.util.function.Predicate;
public class LambdaVsMethodRef {
public static void main(String[] args) {
Predicate<Object> a = Objects::nonNull;
Predicate<Object> b = x -> x != null;
}
}
Run Code Online (Sandbox Code Playgroud)
第一个谓词是从方法引用创建的,另一个是lambda表达式.这些谓词具有相同的行为(nonNull正文是正确的return obj != null;).lambda缩短了两个字符(可能允许流管道适合一行).
除了代码风格,和之间有什么区别?换句话说,我应该更喜欢一个吗?Objects::nonNullx -> x != null
拉姆达-dev的和λ-库-规格- {观察员,专家}邮件列表邮件提isNull,nonNull以及isNotNull(初名)并没有解决这个问题.(我很惊讶没有人质疑添加Objects方法,因为它们可以用lambda轻松替换,但另一方面,也是如此Integer::sum.)
我也查看了字节码javap.唯一的区别是传递给lambda metafactory bootstrap方法的方法句柄:
BootstrapMethods:
0: #16 invokestatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
#17 (Ljava/lang/Object;)Z
#18 invokestatic java/util/Objects.nonNull:(Ljava/lang/Object;)Z
#17 (Ljava/lang/Object;)Z
1: #16 invokestatic …Run Code Online (Sandbox Code Playgroud) 我有一个项目,我用jdk 6,7,8构建这个项目,我的目标是1.6
当我构建jdk 8时,我收到此错误:
Undefined reference: java.util.concurrent.ConcurrentHashMap.KeySetView java.util.concurrent.ConcurrentHashMap.keySet()
因为我在这行中有这个代码:
final Iterator<CLASS_NAME> itr = hashMap.keySet().iterator();
Run Code Online (Sandbox Code Playgroud)
如何避免错误,我在互联网上进行了一些搜索,并且由于java 8改变了它的返回类型键集,我得到了错误.这是任何解决方案.我正在使用maven,而animal-sniffer-plugin会出现此错误,并出现签名错误.
在jpa中集成Java 8 Date Time api的最佳方法是什么?
我添加了转换器:
@Converter(autoApply = true)
public class LocalDatePersistenceConverter implements AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate localDate) {
return Date.valueOf(localDate);
}
@Override
public LocalDate convertToEntityAttribute(Date date) {
return date.toLocalDate();
}
}
Run Code Online (Sandbox Code Playgroud)
和
@Converter(autoApply = true)
public class LocalDateTimePersistenceConverter implements AttributeConverter<LocalDateTime, Timestamp> {
@Override
public Timestamp convertToDatabaseColumn(LocalDateTime entityValue) {
return Timestamp.valueOf(entityValue);
}
@Override
public LocalDateTime convertToEntityAttribute(Timestamp databaseValue) {
return databaseValue.toLocalDateTime();
}
}
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好,但我应该如何使用JPQL进行查询?我正在使用Spring JPARepository,目标是选择日期与给定日期相同的所有实体,唯一的区别是它作为LocalDateTime保存在实体中.
所以:
public class Entity {
private LocalDateTime dateTime;
...
}
Run Code Online (Sandbox Code Playgroud)
和:
@Query("select case …Run Code Online (Sandbox Code Playgroud) 为什么这个代码在java 8中:
IntStream.range(0, 10)
.peek(System.out::print)
.limit(3)
.count();
Run Code Online (Sandbox Code Playgroud)
输出:
012
Run Code Online (Sandbox Code Playgroud)
我希望它输出0123456789,因为窥视优先于限制.
在我看来更奇怪,因为这个事实:
IntStream.range(0, 10)
.peek(System.out::print)
.map(x -> x * 2)
.count();
Run Code Online (Sandbox Code Playgroud)
0123456789按预期输出(不是02481012141618).
PS:.count()这里仅用于消耗流,它可以被其他任何东西替换
我刚刚将一个新项目的JDK版本从7u45切换到8u20时遇到了一个奇怪的错误.我的类开头的无害LogManager声明被拒绝,并出现以下错误:
无法解析java.lang.reflect.AnnotatedElement类型.它是从所需的.class文件间接引用的
这是代码:
public class Class1 {
private static Logger log = LogManager.getLogger(Class1.class);
...
Run Code Online (Sandbox Code Playgroud)
Eclipse建议我配置构建路径,但我不知道要配置什么,因为我不知道该错误的根本问题.
使用JDK与版本7,一切正常.
为什么这不起作用?我得到编译错误"无法对非静态方法打印静态引用..."
public class Chapter3 {
public void print(String s) {
System.out.println(s);
}
public static void main(String[] args) {
Arrays.asList("a", "b", "c").forEach(Chapter3::print);
}
}
Run Code Online (Sandbox Code Playgroud) 拥有使用默认方法的接口的动态代理,如何调用默认方法?通过使用像defaultmethod.invoke(this, ...)你这样的东西,只需调用你的代理调用处理程序(这在某种程度上是正确的,因为你没有这个接口的实现类).
我有一个解决方法,使用ASM创建一个实现接口的类,并将此类调用委托给此类的实例.但这不是一个好的解决方案,特别是如果默认方法调用其他接口方法(你得到一个委托人ping-pong).JLS对这个问题惊讶地保持沉默......
这是一个小代码示例:
public class Java8Proxy implements InvocationHandler {
public interface WithDefaultMethod {
void someMethod();
default void someDefaultMethod() {
System.out.println("default method invoked!");
}
}
@Test
public void invokeTest() {
WithDefaultMethod proxy = (WithDefaultMethod) Proxy.newProxyInstance(
WithDefaultMethod.class.getClassLoader(),
new Class<?>[] { WithDefaultMethod.class }, this);
proxy.someDefaultMethod();
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// assuming not knowing the interface before runtime (I wouldn't use a
// proxy, would I?)
// what to do here to …Run Code Online (Sandbox Code Playgroud) 这可能是一个简单的问题,但我想清楚地理解它......
我有这样的代码:
public final class Persona
{
private final int id;
private final String name
public Persona(final int id,final String name)
{
this.id = id;
this.name = name;
}
public int getId(){return id;}
public String getName(){return name;}
@Override
public String toString(){return "Persona{" + "id=" + id + ", name=" + name+'}';}
}
Run Code Online (Sandbox Code Playgroud)
我正在测试这段代码:
import static java.util.Comparator.*;
private void nullsFirstTesting()
{
final Comparator<Persona>comparator = comparing(Persona::getName,nullsFirst(naturalOrder()));
final List<Persona>persons = Arrays.asList(new Persona(1,"Cristian"),new Persona(2,"Guadalupe"),new Persona(3,"Cristina"),new Persona(4,"Chinga"),new Persona(5,null));
persons
.stream()
.sorted(comparator)
.forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)
这显示以下结果:
Persona{id=5, …Run Code Online (Sandbox Code Playgroud) 我试图将lambda分配给Object类型:
Object f = ()->{};
Run Code Online (Sandbox Code Playgroud)
它给我错误说:
The target type of this expression must be a functional interface
Run Code Online (Sandbox Code Playgroud)
为什么会这样,以及如何做到这一点?