gpt4 book ai didi

java - 对具有泛型参数的 java 接口(interface)方法使用特定的实现类型。如何避免不加控制的 Actor 阵容

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:18 25 4
gpt4 key购买 nike

我有以下界面

public interface ITransform<T,V> {
V convert(T object) throws Exception;
}

我有一个类,Class1,它使用此接口(interface)作为其方法参数。但它需要一个特定的 impl 类型( ChannelBuffer )来代替 T ,如下所示。

public static <T,V> V readObject(ChannelBuffer buffer, int length, ITransform<ChannelBuffer, V> transformer)
{
ChannelBuffer buffer = buffer.readSlice(length);
V obj = null;
obj = transformer.convert(buffer);
return obj;
}

我有一个用于 ITransform 接口(interface)的实现类 Class2,如下所示。

public class Transformer implements ITransform<ChannelBuffer, Object>{
@Override
public Object convert(ChannelBuffer buffer) throws Exception {
return someObject;
}
}

我面临的问题是,当我想从Class3调用Class1的readObject时,我需要进行unchecked强制转换,如下所示。

public <T,V> V readObject(ITransform<T,V> converter)
{
@SuppressWarnings("unchecked")
ITransform<ChannelBuffer,V> decoder = (ITransform<ChannelBuffer,V>) converter;
return class1.readObject(buffer, decoder);
}

Class3本身不能有ChannelBuffer的原因在其 readObject 方法参数中,它正在实现一个 Interface2 方法 <T,V> V readObject(ITransform<T,V> converter)我不想修改 Interface2 方法以具有 ChannelBuffer因为这会将接口(interface)的所有实现都绑定(bind)到 ChannelBuffer .

最佳答案

interface Interface2<T>

public <V> V readObject(ITransform<T,V> converter)


class Class3 implements Interface2<CharBuffer>

public <V> V readObject(ITransform<CharBuffer,V> converter)
{
return class1.readObject(converter, decoder);
}

关于java - 对具有泛型参数的 java 接口(interface)方法使用特定的实现类型。如何避免不加控制的 Actor 阵容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8066428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com