Java 让Intellij Idea突出显示不兼容的编译器代码?

Java 让Intellij Idea突出显示不兼容的编译器代码?,java,eclipse,intellij-idea,intellij-14,Java,Eclipse,Intellij Idea,Intellij 14,所以我们遇到了一个问题,javac可以编译一些东西,但是。这可能是一个javac错误,但考虑到报告已经存在了多长时间,我怀疑双方都不会解决这个问题 错误是:类型GenericsEclipseCompilerIssue.CollectionToString中的方法apply(Collection)不适用于参数(Collection) import java.util.Collection; 导入java.util.Collections; 导入java.util.List; 导入java.util

所以我们遇到了一个问题,
javac
可以编译一些东西,但是。这可能是一个
javac
错误,但考虑到报告已经存在了多长时间,我怀疑双方都不会解决这个问题

错误是:类型GenericsEclipseCompilerIssue.CollectionToString中的方法apply(Collection)不适用于参数(Collection)

import java.util.Collection;
导入java.util.Collections;
导入java.util.List;
导入java.util.Objects;
导入java.util.Optional;
导入java.util.function.function;
导入java.util.stream.collector;
公共类GenericsEclipseCompilerIssue
{
公共静态函数optionalCollectionToString(

final Function在这个场景中,像罗马人那样做更有意义。因为每个人都在使用Eclipse编译器,所以您也应该这样做(至少在该策略决定更改之前)


为此,请在“设置”>“构建、执行和部署”>“编译器”>“Java编译器”下,将设置从Javac切换到Eclipse。现在,IntelliJ将利用Eclipse编译器来构建代码。

您是否选择在日常例行工作中切换到Eclipse编译器?@Makoto我的团队的其他成员正在使用Eclipse事实上,我是唯一一个不这样做的人。我们可以说我应该这样做,但是,我个人觉得这是不能容忍的。你不在IntelliJ中使用Eclipse编译器有什么具体的原因吗?我不会说你应该使用Eclipse,但你可以使用它的编译器…@Makoto我不知道这是可能的,我想一般来说(这可能是原因)我也不知道为什么你会…如果你想提供一个解释这个问题的答案,以及如何解释的话,这可能是一个解决方案。所以这是一个不错的答案,但我刚刚意识到它破坏了我的调试器(看不到局部变量),这不是一个可接受的折衷(是的,我启用了生成调试信息)
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;

public class GenericsEclipseCompilerIssue
{

    public static <T> Function<Optional<Collection<T>>, String> optionalCollectionToString(
        final Function<? super T, String> elementTransformer ) {
        return (collection) -> {
            return new CollectionToString<>( elementTransformer )
                .apply( collection.orElse( Collections.emptyList() ) );
        };
    }

    static class CollectionToString<E> implements Function<Collection<E>, String> {

        private final Function<? super E, String> elementTransformer;

        public CollectionToString( final Function<? super E, String> elementTransformer )
        {
            this.elementTransformer = elementTransformer;
        }

        @Override
        public String apply( final Collection<E> collection )
        {
            List<String> strings = collection.stream()
                .filter( Objects::nonNull )
                .map( elementTransformer::apply )
                .sorted( String.CASE_INSENSITIVE_ORDER )
                .collect( Collectors.toList() );

            return  strings.toString();
        }
    }
}