所以我们遇到了javac
可以编译除了eclipse can't之外的问题。这可能是javac
错误,但我怀疑考虑到initial jdk bug报告已经存在多长时间,双方都无法解决问题。
错误是:GenericsEclipseCompilerIssue.CollectionToString类型中的方法apply(Collection)不适用于参数(Collection)
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();
}
}
}
有没有办法让Intellij Idea强调这一点,以便我不小心引入这个问题?
答案 0 :(得分:3)
在这种情况下,像罗马人那样做更有意义。由于每个人都在使用Eclipse编译器,因此您也应该(至少在该策略决定更改之前)。
为此,请在“设置”下执行;构建,执行和部署&gt;编译器&gt; Java编译器,将设置从Javac切换到Eclipse。现在,IntelliJ将使用Eclipse编译器来构建代码。