gpt4 book ai didi

java - 如何在 Java 中使用流畅的接口(interface)和泛型修复对象返回类型

转载 作者:行者123 更新时间:2023-11-30 07:47:39 25 4
gpt4 key购买 nike

我已经通过接口(interface)实现了流畅的方法。但我需要附加其他具体方法来保持原始功能。

我扩展了原始界面并创建了其他界面。

但我无法链接方法调用。返回类型是Object,但是方法实现的很好。

不知道会实例化什么类型的对象。它是在运行时确定的。所以我不能强制转换为具体的实现,例如

PlainTextProcessor<TabbedFile>

我该如何解决这个问题?

期望的功能:

// TabbedFile is determined at runtime. I only
// know that the instantiated type should implement
// the PlainTextProcessor interface.
PlainTextProcessor processor = new TabbedFile();

processor.method1(arg1).method(arg2).method3(arg3);

代码:

// Base interface
public interface DataProcessor<T>
{
T method1(String classname);
T method2(String classname);
}

// Concrete interface
public interface PlainTextProcessor<T> extends DataProcessor<T>
{
T method3(String[] data);
}

// Concrete implementation
public class TabbedFile implements PlainTextProcessor<TabbedFile>
{
@Override
public TabbedFile method1(String classname)
{
...
return this;
}

@Override
public TabbedFile method2(String classname)
{
...
return this;
}

@Override
public TabbedFile method3(String[] data)
{
...
return this;
}
}

// TargetClass
public class Processor
{
private PlainTextProcessor processor;

...

public void Dowork()
{

// Created via factory
processor = ProcessorFactory.GetProcessor(param);

processor
.method(arg1)
.method2(arg2)
.method3(arg3);

}

最佳答案

在java中你有covariant return types从 Java 1.5 开始支持开箱即用。因此,您的示例根本不需要通用。

// Base interface
public interface DataProcessor
{
DataProcessor method1(String classname);
DataProcessor method2(String classname);
}

// Concrete interface
public interface PlainTextProcessor extends DataProcessor
{
PlainTextProcessor method1(String classname);
PlainTextProcessor method2(String classname);
PlainTextProcessor method3(String[] data);
}

// Concrete implementation
public class TabbedFile implements PlainTextProcessor
{
@Override
public TabbedFile method1(String classname)
{
...
return this;
}

@Override
public TabbedFile method2(String classname)
{
...
return this;
}

@Override
public TabbedFile method3(String[] data)
{
...
return this;
}
}

关于java - 如何在 Java 中使用流畅的接口(interface)和泛型修复对象返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49636105/

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