【问题标题】:Nice way to return 'default' object using generics使用泛型返回“默认”对象的好方法
【发布时间】:2018-07-22 13:57:23
【问题描述】:

假设我有一个类是其他类的父类,并且包含指示处理过程中出现问题的布尔标志。例如:

class BaseClass 
{
    private bool error;
    ....
}

该类的子级用于处理。
它由实现服务接口的类使用:

public interface MyService 
{
   public ClassA execute1();
   public ClassB execute2();
   public List<ClassC> execute3(); 
}

ClassAClassBClassC 扩展自 BaseClass
实现上述接口的类的实例用于其他类是 Spring @Service,有一个服务列表:

List<MyService> services;

在服务类中,还有一个方法可以在几个同时运行的线程中调用 MyService 实现的实例。签名是

public <T> List<T> callServices(Function<MyService, T> callback)

我的问题是 - 在 callServices 方法内部如何返回 ClassA、ClassB 或 List 的空对象并设置错误标志?

我想过这样的事情:

public <T extends BaseClass> List<T> callServices(Function<MyService, T> callback)

但这不适合List&lt;ClassC&gt;

我们不知道确切的类型并且有擦除。问题在于List&lt;ClassC&gt;。我的想法是将一个额外的参数传递给带有错误标志的方法,但我想知道是否有其他更通用的方法来做到这一点。

【问题讨论】:

  • 您可以使用where 约束,但您尝试的非常奇怪。你的目标到底是什么?
  • 为什么error 是私有的?如果它是internalpublic,它可以被设置。如果服务需要知道是否存在错误,那么该信息应该是公开的。

标签: c# .net generics


【解决方案1】:
where T: new()

并将错误初始化放在默认构造函数中。反序列化将清除错误。有时即使 T 没有被反序列化,这也有效。

【讨论】:

    猜你喜欢
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2012-06-09
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多