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();
}
}
}