gpt4 book ai didi

java - 如何返回接口(interface)实现的类型

转载 作者:行者123 更新时间:2023-11-29 08:29:26 25 4
gpt4 key购买 nike

想法是让 Export 类中的 ExporParts 函数与任何 WebData 派生一起工作。为此,我需要知道 T 类型类及其名称。

建议的解决方案有效,但我必须手动编写。我想知道是否可以仅使用有关类型的当前信息知道类名。

另一方面,反射不是一种选择。太贵了。

谢谢。

例子

// Data gathered at runtime, may be other derivative class
WebData data = new BikeModel();
Webdata data2 = new FooModel();

BikeParser parser = new BikeParser();
FooParser parser2 = new FooParser();

// Should be BikeModel, FooModel
Class<?> returnedtype = parser.GetreturnType();
Class<?> returnedtype2 = parser2.GetreturnType();

// Exporter algorithms wrapper
Exporter exporter = new Exporter();
exporter.SetExporter("BikeExporter",returnedtype);

// Finally export data
exporter.ExportData(data);

// Works too
exporter.SetExporter("FooExporter",returnedtype2);
exporter.ExportData(data2);

实现:

public abstract class WebData { ... }

// Data models
public class BikeModel extends WebData { ... }
public class FooModel extends WebData { ... }

public interface IParser <T extends WebData>
{
T ParseData();
Class<T> GetReturnType();
}

// Concrete class
public class BikeParser implements IParser<BikeModel>
{
@Override
public BikeModel ParseData() { ... }

@Override
public Class<BikeModel> GetReturnType()
{
return BikeModel.class;
}

// interface to export diferent types of data
// BikeModel, FooModel, etc.
public interface IExporter<T extends WebData>
{
void ExporParts(T data);
}

// Concrete Exporters
public class BikeExporter implements IExporter<BikeModel> { ... }
public class FooExporter implements IExporter<FooModel> { ... }

public class Exporter
{

private IExporter exporter;

public void SetExporter(String name, Class<T extends WebData> type)
{
exporter = ExporterFactory.GetExporter(name,type)
}

public <T extends WebData> void ExporParts(T data)
{
Class<T> c = (Class<T>) data.getClass();
exporter.ExporParts(c.cast(data));
}
}

最佳答案

我认为您只是在寻找 class literal :

@Override
public Class<BikeModel> GetReturnType()
{
return BikeModel.class;
}

关于java - 如何返回接口(interface)实现的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49512036/

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