当前位置: 首页 > 知识库问答 >
问题:

用非静态类包装静态类

董和风
2023-03-14

我在看一个项目,我发现了一些很奇怪的东西。

public static class DAI

    public static ResponseObject ExecStatement(string db, string sql)
    {
         { ... }
    }

    public static DataSetResponseObject GetDataSet(string db, string sql)
    {
         { ... }
    }

    public static DataTableResponseObject GetDataTable(string db, string sql)
    {
         { ... }
    }
}
public class ExecSP : IExecSP
{
    string _db;
    public ExecSP(string db)
    {
        _db = db;
    }

    public ResponseObject OutputAsResponseObject(string sql)
    {
         return DAI.ExecStatement(_db, sql);
    }

    public ResponseObject OutputAsDataSet(string sql)
    {
         return DAI.GetDataSet(_db, sql);
    }

    public ResponseObject OutputAsDataTable(string sql)
    {
         return DAI.GetDataTable(_db, sql);
    }
}

现在,我认为唯一的两个优点是,在非静态容器中封装时,命名更加清晰,并且可以传递的参数更少。

但我想知道这是不是一个好主意,通过设计来包装静态类与非静态?如果有的话,还有哪些其他原因?因为我认为创建一个静态并对其进行调用是可以的。但是这个项目特意将所有静态类打包;我也不知道为什么。

共有1个答案

谷梁子昂
2023-03-14

我过去这样做的最常见的原因是如果静态方法是由第三方库提供的(即我没有编写它),但我不想编写直接依赖于该库的代码。在这种情况下,我将编写自己的类,并让它接受直接依赖项。

假设我使用了一个接口(或者类似于您的示例中的一些东西),那么如果我后来决定要使用一个不同的库,我可以编写另一个实现相同接口的类,并在运行时交换出具体的类(使用类似于依赖注入的东西)。

 类似资料:
  • 问题内容: 直到几周前,我还以为我知道何时创建字段和方法或。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为。 但是几周后,我读到了有关JVM垃圾收集的信息。 我知道字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。 但是,如果我不创建该字段,至少它将被垃圾回收。 因此,在使字段/方法静态化与否之间似乎有一条 很细的界限 。 有人可以

  • 问题内容: 运行Demo类将在SomeClass中调用静态方法newInstance来调用构造函数并打印问候 定义方法将包括返回类型+方法名称以及参数 newInstance的返回类型是 SomeClass 在我看来很奇怪,因为我的班级叫做SomeClass 而不是 SomeClass 为什么在SomeClass 前面需要 ?看来,如果我不包含它,将会出现一个常见错误,称为“无法对非静态类型T进行

  • 问题内容: 只是为了澄清我正在考虑的这个权利,在Java中,静态字段是整个类使用的变量/字段,还是可以用于引用该类的所有对象?非静态字段是由对象定义的变量吗?并且与对象1引用相同类的第二个对象可以具有与对象1的静态字段不同的值吗? 问题答案: 与实例变量不同,在创建该类的实例之前,可以访问该类中的静态字段或静态类变量。在运行时创建该类的实例时,将创建该类中的实例变量(非静态变量)。因此,直到创建该

  • 我想澄清一下,在java中,静态字段是整个类使用的变量/字段,或者可以被引用该类的所有对象使用?非静态字段是由对象定义的变量?第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?

  • 我的程序有问题。Eclipse写道: 我做错了什么?我的应用程序中有2个错误。班你能改进我的代码并解释一下吗?先谢谢你。 多边形 地聚线

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 为什么我会得到“无法从静态上下文引用的非静态变量”? 这是代码 错误说: 非静态类 Node 不能从静态上下文中引用 为什么不应该在main()方法中引用Node类? 问题答案: Java中的非静态嵌套类包含对父类 实例 的隐式引用。因此,要实例化a ,您还需要具有一个实例。在静态上下文(主要方法)中,没有要引用的实例。因此,编