,基本上看起来这个Persistable
是Spring Data中的一个接口getId
和isNew
Optional<Pair<Persistable<Long>, <Persistable<Long>>> pair = Optional.of( Pair.of( prev, next ) );
return Long.instructions()
.map( instruction -> {
return pair.map( extractPair( instruction.extractProperty() ) )
.map( instruction.pairToBuilder() )
.filter( Optional::isPresent )
} );
有时我想将“Long”转换为String,其他时候转换为Integer。这是从复杂对象中减少的假设。
我想将我的指令存储在Enum中,指令界面目前看起来像这样。
interface Instruction<IN, OUT, BUILDER> {
<INPUT> Function<Pair<INPUT, INPUT>, Optional<BUILDER>> pairToBuilder()
Function<IN, OUT> extractProperty();
}
所以目前这些位编译问题来自于处理指令的实际实现
public class PeristableInstruction<OUT> implements Instruction<Persistable<Long>, OUT, String>
private final Function<Persitable<Long>, OUT> extractProperty;
private Function<Pair<OUT, OUT>, Optional<String>> pairOptionalFunction;
@Override
public <INPUT> Function<Pair<INPUT, INPUT>, Optional<String>> pairToBuilder() {
return this.pairOptionalFunction;
}
@Override
public Function<Persistable<Long>, OUT> extractProperty()
{
return extractProperty;
}
此处extractPair
Pair
的实施只是org.apache.commons.lang3.tuple.Pair
static <OUT, IN> Function<Pair<IN, IN>, Pair<OUT, OUT>> extractPair( final Function<IN, OUT> extract ) {
return pair -> Pair.of( extract.apply( pair.getLeft() ), extract.apply( pair.getRight() ) );
}
问题当然是INPUT
不是OUT
但它应该是,但是如果我将签名更改为不使用INPUT
.map
则不喜欢它,我想不出基于此的方法来做到这一点。
更新虽然无关紧要,因为问题似乎是如何指定一个指令字段以使其一般正确,这里是指令源,其中包含一些 ished 代码
SPECIFIC_INSTRUCTION( new PersistableInstructio<>( Persistable::Long, Long::toString, Builder::new ) );
private final Optional<PersistableInstruction<?>> instruction;
PersistableInstructions( final PersitableInstruction<?> instruction )
{
this.instruction = Optional.ofNullable( instruction );
}
public static Stream<PersistableInstruction<?>> instructions() {
return Stream.of( PersistableInstructions.values() )
.map( PersistableInstructions::getInstruction )
.filter( Optional::isPresent )
.map( Optional::get );
}
public Optional<PersistableInstruction<?>> getInstruction()
{
return instruction;
}
通用意图是提供可以提供给Optional或Stream map
方法的一系列指令。
我已成功将内联方法引用和函数转换为地图块,尝试循环这些函数,而不是复制和粘贴地图链结构100次。如何修复我的泛型结构以提供映射实现的说明?
正确答案将提供可编辑的代码,不使用强制转换(因为强制转换是我的解决方法)。
答案 0 :(得分:0)
到目前为止我找到解决这个问题的唯一方法是
@Override
@SuppressWarnings( "unchecked" )
public <INPUT> Function<Pair<INPUT, INPUT>, Optional<String>> pairToBuilder() {
return (Function) this.pairOptionalFunction;
}
@Override
@SuppressWarnings( "unchecked" )
public Function<Persistable<Long>, OUT> extractProperty()
{
return (Function) extractProperty;
}