gpt4 book ai didi

java类/接口(interface)适配器问题

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

我有一个硬汉,我正试图用我的头脑来解决它。我有一些公共(public)接口(interface)和一些包私有(private)类,如下所示。

基本上,我的包私有(private)类(下面称为 UltraDecoder)需要一些蹩脚的解码逻辑来解码数据并对其执行一些操作以供其内部使用。不过,我还想将这种蹩脚的解码逻辑用于其他目的。我似乎无法找到一种好方法将我的蹩脚解码逻辑导出为可供外部类使用的接口(interface),并且仍然在我的 UltraDecoder 类内部使用它,而不暴露 UltraDecoder 的内部细节。

有什么建议吗?

/** structured metadata */
public interface Metadata { ... }

/**
* an opaque data item that can be unpackaged
* to zero or more pairs of (Metadata metadata, int value)
*/
public interface DataItem { ... }

public interface SuperDecoder {
...
/** decodes the item and passes each (metadata, value) pair
* to a listener by calling its onUpdate() method
*/
public void decode(DataItem item, SuperDecoderListener listener);
}

public interface SuperDecoderListener {
public void onUpdate(Metadata m, int value);
}

/* package-private classes implementation classes follow */
class UltraDecoder implements SuperDecoder
{
static private class SmartObjectWithMetadata
{
final private Metadata metadata;
public Metadata getMetadata();
}

private interface UltraDecoderListener
{
public void onUpdate(SmartObjectWithMetadata, int value);
}

private void ultraDecode(DataItem item, UltraDecoderListener listener)
{
/* ... does lots of grungework to obtain
the (SmartObjectWithMetadata, value) pairs that correspond to this
DataItem.

Calls listener.onUpdate(smartObject, value) zero or more times.
*/
}

public doSomething()
{
/* ... calls ultraDecode() ... this happens normally */
}
@Override public void decode(DataItem item,
final SuperDecoderListener listener)
{
/* ??? how do we leverage ultraDecode ???
* Below, we can do it but we have to create
* a new adapter object each time.
*/
ultraDecode(item, new UltraDecoderListener() {
@Override public void onUpdate(
SmartObjectWithMetadata smartObject,
int value)
{
listener.onUpdate(smartObject.getMetadata(), value);
}
}
}
}

最佳答案

在与UltraDecoder同一个包中创建一个公共(public)类DecoderUtil。

    public class DecoderUtil {        public static void decode(SuperDecoder decoder) {           //do common stuff           if( decoder instanceof UltraDecoder ){                //do stuff specific to UltraDecoder           }        }    }

关于java类/接口(interface)适配器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3730455/

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