标签: private-constructor

.Net中的私有与静态构造函数

我搜索了很多,但没有一个答案是清楚的(至少对我来说!).现在我把这个问题放进去,因为我相信我无法在其他任何地方得到更明确的答案.

我什么时候应该在班上使用私有/静态构造函数?

我厌倦了通常的答案,所以请帮助我一些实时的例子和使用这些构造函数的优点/缺点.

.net c# static-constructor private-constructor

9
推荐指数
2
解决办法
1万
查看次数

隐式删除了复制构造函数,因为默认定义不正确

我有一个类A(来自我无法控制的库),有一个私有拷贝构造函数和一个clone方法,以及一个B派生自的类A.我想实现cloneB为好.

天真的做法

#include <memory>

class A { // I have no control here
  public:
    A(int a) {};

    std::shared_ptr<A>
      clone() const
      {
        return std::shared_ptr<A>(new A(*this));
      }

  private:
    A(const A & a) {};
};

class B: public A {
  public:
    B(int data, int extraData):
      A(data),
      extraData_(extraData)
    {
    }

    std::shared_ptr<B>
    clone() const
    {
      return std::shared_ptr<B>(new B(*this));
    }

  private:
    int extraData_;
};

int main() {
  A a(1);
}
Run Code Online (Sandbox Code Playgroud)

但是,失败了,因为复制构造函数A是私有的:

main.cpp: …
Run Code Online (Sandbox Code Playgroud)

c++ clone copy-constructor private-constructor

8
推荐指数
1
解决办法
1万
查看次数

具有私有构造函数的最终类,设计原则是什么

我最近正在浏览一个 Netflix开源项目

在那里,我发现使用最终类和私有构造函数.我完全清楚这一点

  1. 最后是避免继承
  2. 私人是禁止实例化

但我很想知道为什么它们一起使用.虽然方法是静态的,但我们可以在没有实例化的情况下使用它们,但仍然渴望了解它背后的设计原理.

java private-constructor final-class

8
推荐指数
1
解决办法
4217
查看次数

JaCoCo并错过了对私有默认构造函数的报道

我想看一个例子来阻止JaCoCo将私有空构造函数报告为Java类中的非覆盖代码.

在我的maven插件配置中

   <rule>
     <element>CLASS</element>
       <excludes>
         <exclude>JAVAC.SYNTHCLASS</exclude>
         <exclude>JAVAC.SYNTHMETH</exclude>
       </excludes>
     </element>
   </rule>
Run Code Online (Sandbox Code Playgroud)

是不是有类似的构造函数?

java code-coverage private-constructor jacoco-maven-plugin

7
推荐指数
1
解决办法
7615
查看次数

为什么System类声明为final并具有私有构造函数?

据我所知

最后一堂课

最后一个类只是一个无法扩展的类.

具有单个无参数私有构造函数的类

除了在同一个类中的表单之外,不能实例化具有私有构造函数的类.这使得从另一个类扩展它无用.但这并不意味着它根本不能被分类,在内部类中我们可以扩展并调用私有构造函数.

所以我的理解是,如果我们用单个无参数私有构造函数创建一个类,那么将它们声明为final是没有意义的.那么为什么Java中的System类声明为final类,尽管它有单个无参数的私有构造函数?

我听说上课最后有一些表现.这是正确的,这是将System类声明为final的唯一原因吗?请澄清为什么Java像这样实现了System类.

java final private-constructor

6
推荐指数
1
解决办法
1977
查看次数

在 java 中扩展实用程序类的最佳实践

我扩展了 apache-commons-3 中的类来添加我自己的实用函数,这些函数在其中不可用。例如:

public class CollectionUtils extends org.apache.commons.collections.CollectionUtils
{
        /**
     * Similar to collection.contains(member) except just doesn't throw NPE when set is null, simply returns false
     * @param collection
     * @param member
     * @return
     */
    public static <K> boolean contains(Collection<K> collection,K member)
    {
        return collection!=null && collection.contains(member);
    }
}
Run Code Online (Sandbox Code Playgroud)

这解决了我通过同一个类使用函数和公共函数的目的CollectionUtils

但是,Apache 在版本 4 中通过在实用程序类中引入私有构造函数来删除可扩展性。这里也有同样的讨论。

现在,如果我升级到版本 4,我的代码就会被破坏。扩展实用程序类以添加自定义/特定实用程序方法的最佳实践是什么?

java utility private-constructor

6
推荐指数
1
解决办法
3723
查看次数

这段代码如何创建一个只有私有构造函数的类的实例?

我正在开发一个声音库(使用OpenAL),并从FMOD提供的界面中获取灵感,您可以在此链接中看到界面.

我已经提供了一些概念,如:声音,通道和通道组,你可以通过FMOD界面上看到,所有这些类都有一个私有的构造方法,例如,如果你想创建一个声音,你肥大使用功能createSound()提供由System类(如果您要创建Channel或ChannelGroup,则相同).

我想提供一个类似的机制,但我不明白它是如何工作的.例如,函数createSound()如何创建一个新的声音?构造函数是私有的,并且从Sound接口没有任何静态方法或友谊.是用过一些图案?

编辑:只是为了让OP的问题清楚,他/她不会问如何用私有构造函数创建类的实例,问题是在发布的链接中,如何创建具有私有构造函数和静态方法或朋友的类的实例功能.

谢谢.

c++ private-constructor

5
推荐指数
2
解决办法
309
查看次数

静态类VS私有构造函数

今天,我一直在阅读静态类和私有构造函数.

静态类 - 我们无法在静态类上创建实例.我们不能继承静态类.仅生成单个实例.

私有构造函数 - 我们无法创建实例.我们不能继承.(我不知道生成了多少个实例.)

我创建了两个控制台应用程序,一个用于静态类,一个用于私有构造函数.

静态类代码

在此输入图像描述

我理解生成的单个对象作为构造函数被调用一次.

私有构造函数代码

在此输入图像描述

现在,我不明白是否生成了任何对象.

我有两个问题.

问题1.我没有发现Private构造函数和Static类之间有任何特别的区别.你能告诉我在哪种情况下我应该使用Private Constructor,我应该在哪里使用Static类,因为我可以使用它们.

问题2.如果我使用私有构造函数,会生成多少个对象?

谢谢.

编辑:

我认为人们不理解我的问题.我知道静态构造函数总是在第一个引用上调用一次.静态构造函数用于初始化类的静态成员.

问题1.我有一种情况:我需要创建一个无法实例化的类.我可以通过静态类或私有构造函数来完成.所以我的问题是"两者之间有什么区别吗?我应该使用哪一个?"

问题2.如果我使用私有构造函数,创建了多少个对象?如果answer为0,则私有构造函数的内存分配在CLR中如何工作.如果我使用私有构造函数,则没有内存分配.

c# clr object private-constructor static-class

5
推荐指数
2
解决办法
7374
查看次数

如何在具有泛型类型参数的函数中引用具有私有构造函数的类?

我有一个基类和多个扩展该基类的类,它们都有一个私有构造函数。

我现在想创建一个静态函数来创建扩展类的新实例。通常我会有一个类似这样的函数头:

public static createInstance<T extends BaseClass>(clazz: { new(): T }): T
Run Code Online (Sandbox Code Playgroud)

当我想使用这个功能时:

createInstance(CustomClass)
Run Code Online (Sandbox Code Playgroud)

它会导致打字稿吐出此错误:

TS2345:“typeof CustomClass”类型的参数不可分配给“new () => CustomClass”类型的参数。无法将“私有”构造函数类型分配给“公共”构造函数类型。

代码实际转译的代码工作得很好。

我知道这个错误告诉我什么。但我找不到解决这个问题的方法。我已经搜索了很多,而且我似乎很孤独地遇到这个问题。有什么方法可以引用带有私有构造函数的类吗?

private-constructor typescript

5
推荐指数
1
解决办法
2293
查看次数

为什么构造函数Zlib_init在Bjarne Stroustrup的书中的Zlib_init类中保持私有

在Bjarne Stroustrup撰写的The C++ Programming Language一书中,作者说:

有时,当你设计一个库时,有必要或者只是方便地发明一个带有构造函数和析构函数的类型,其唯一目的是初始化和清理.这样的类型只能使用一次:分配一个静态对象,以便调用构造函数和析构函数.例如:

 class  Zlib_init
{
    Zlib_init() ; //get Zlib ready for use
   ~Zlib_init()  ; //clean up after Zlib
};
Class Zlib
{
   static  Zlib_init   x;
   /  /...
};
Run Code Online (Sandbox Code Playgroud)

遗憾的是,不能保证这样的对象在第一次使用之前被初始化,并且在最后一次使用之后被销毁在由单独编译的单元组成的程序中.

为什么作者将构造函数和析构函数保留为私有成员?如果我们在由单独编译的单元组成的程序中使用它,为什么这个方法不起作用?是否需要定义成员x来调用构造函数Zlib_init()和析构函数~Zlib_init()?那么这种方法的用途是什么?这是在本书的第10.4.9节.

c++ private-constructor

3
推荐指数
1
解决办法
180
查看次数