标签: java-8

未找到PowerMockito和Java 8 ZonedDateTime toInstant()

我运行我的测试:

@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.但也许有人有点想法(?)

datetime powermock java-8

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

Objects :: nonNull和x - > x!= null之间有什么区别吗?

考虑以下课程:

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)

java lambda java-8 method-reference

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

"未定义的引用:.. ConcurrentHashMap.keySet()"在Java 8中构建时

我有一个项目,我用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会出现此错误,并出现签名错误.

java concurrenthashmap java-8

14
推荐指数
2
解决办法
5625
查看次数

JPA中的Java 8 Date Time api

在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)

spring hibernate jpa java-8 spring-data-jpa

14
推荐指数
2
解决办法
6544
查看次数

Java 8流查看和限制交互

为什么这个代码在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()这里仅用于消耗流,它可以被其他任何东西替换

java java-8 java-stream

14
推荐指数
3
解决办法
3167
查看次数

将LogManager(l4j2)与Java 8一起使用时出错(无法解析java.lang.reflect.AnnotatedElement)

我刚刚将一个新项目的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,一切正常.

java java-7 java-8 log4j2

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

Java 8方法参考非静态方法

为什么这不起作用?我得到编译错误"无法对非静态方法打印静态引用..."

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)

java java-8 method-reference

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

Java8动态代理和默认方法

拥有使用默认方法的接口的动态代理,如何调用默认方法?通过使用像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)

java java-8

14
推荐指数
3
解决办法
3498
查看次数

Java 8 Comparator nullsFirst naturalOrder困惑

这可能是一个简单的问题,但我想清楚地理解它......

我有这样的代码:

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)

java sorting string comparator java-8

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

为什么我不能将lambda赋给Object?

我试图将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)

为什么会这样,以及如何做到这一点?

java java-8

14
推荐指数
2
解决办法
8980
查看次数