相关疑难解决方法(0)

静态和非静态初始化代码块之间有什么区别

我的问题是静态关键字的一个特定用法.可以使用static关键字来覆盖不属于任何函数的类中的代码块.例如,以下代码编译:

public class Test {
    private static final int a;    
    static {
        a = 5;
        doSomething(a);
    }
    private static int doSomething(int x) {
        return (x+5);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你删除static它抱怨的关键字,因为变量afinal.但是,可以删除两个finalstatic关键字并使其编译.

这两种方式让我感到困惑.我怎么能有一个不属于任何方法的代码部分?如何调用它?一般来说,这种用法的目的是什么?或者更好,我在哪里可以找到关于此的文档?

java static static-initializer

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


TypeScript模式在创建单例实例时传递选项

我有一个TypeScript单例类

class MySingleton {
    private static _instance: MySingleton;

    private constructor();

    public static getInstance() {
        if (!MySingleton._instance) {
            MySingleton._instance = new MySingleton();
        }

        return MySingleton._instance;
    }

}
Run Code Online (Sandbox Code Playgroud)

现在,我想在创建这个单例实例时传递一些选项.

例如,将实例的模式设置为生产模式的选项.

因此,可以通过getInstance接受传播到构造函数的选项对象来实现.然后使用变得像

MySingleton.getInstance({
    prodMode: true
});
Run Code Online (Sandbox Code Playgroud)

这是最好的方法吗?这样做有点蠢,因为当通过传递选项对象MySingleton执行的消费者时getInstance,他或她无法知道传递的选项对象将被使用或被忽略.

javascript singleton design-patterns javascript-objects typescript

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

带参数的单实例化

我有一个类(RInterfaceHL)调用另一个类(JRIEngine),它在单线程应用程序上提供本机方法.因此,我只希望每个JVM都有一个类的实例(RInterfaceHL).

我可以使用带有静态初始化的单例模式来确保只有RInterfaceHL的单个实例化,但是RInterfaceHL需要构造一个JRIEngine实例并为其提供一个loopback参数.如何以线程安全的方式提供单个RInterfaceHL实例,该实例接受用于构造单个JRIEngine的loopback参数?我正在使用JDK6.

注意:这个类似命名的问题没有回答我的问题.

java concurrency singleton

4
推荐指数
1
解决办法
7006
查看次数

单身人士和建造者(约书亚的方式)

我正在建立一个基于约书亚建设者模式的建设者.我的问题是如何让它成为单身人士?详细阐述我的观点,如果我有下面的建设者

public class Widget {
    public static class Builder {
        private String name;

        public Builder( String name) {
            this.name = name;
        }

        public Widget build() {
            Widget result = new Widget(this);
            return result;
        }
        public Builder model( String value ) {
            this.model = value;
            return this;
        }
    }

    private final String name;

    private Widget( Builder b ) {
        this.name = b.name;
    }

    // ... etc. ...
}
Run Code Online (Sandbox Code Playgroud)

我会从另一个类中调用此构建器,如新的Widget.Builder().name("abc").build()........

但是如果我只想要这个Widget的一个实例,或者我需要从多个地方访问这个Widget而不需要每次都创建一个新的Widget.理想情况下,我想将实例化限制在Widget类中.有什么想法吗?

java builder

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

我怎样才能改进这个单身人士?

我有一个将作为单身人士的课程.
该类将获取一个文件作为构造函数的一部分.之后,课程准备好了.
因此,目前我使用双重检查锁定惯用法并通过static getInstance()经典方式获得单例的实例.
我的问题是,目前我经常这样做:

MySingleton.getInstance(theFile);

并且theFile仅在第一次构造单身时才需要.在那之后,即一旦构建了单身人士,我就不需要传递theFile.
我该怎么办?
我想创建一个MySingleton.getInstance(); 但仍然无法工作,因为调用者必须MySingleton.getInstance(theFile); 第一次调用构造一个有效的类.
我怎样才能更好地设计它?

java oop singleton design-patterns

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

在 es6 中扩展单例类

我需要在 JavaScript 中扩展一个单例类。

我面临的问题是我获取了我所扩展的类实例,而不是仅获取了该类的方法。

我尝试删除super以获取实例,但随后出现错误

在访问“this”或从派生构造函数返回之前,必须调用派生类中的超级构造函数

代码示例:

let instanceA = null;
let instanceB = null;

class A {
  constructor(options) {
    if (instanceA === null) {
      this.options = options;
      instanceA = this;
    }
    return instanceA;
  }
}

class B extends A {
  constructor(options) {
    if (instanceB === null) {
      super()
      console.log('real class is ' + this.constructor.name)
      this.options = options
      instanceB = this;
    }
    return instanceB;
  }
}

const a = new A({
  i_am_a: "aaaaaa"
});

const b = new …
Run Code Online (Sandbox Code Playgroud)

javascript oop es6-class

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

使用静态内部类创建java单例

我想使用以下模式在java中创建单例

public class Singleton {
        // Private constructor prevents instantiation from other classes
        private Singleton() { }

        /**
        * SingletonHolder is loaded on the first execution of Singleton.getInstance() 
        * or the first access to SingletonHolder.INSTANCE, not before.
        */
        private static class SingletonHolder { 
                public static final Singleton INSTANCE = new Singleton();
        }

        public static Singleton getInstance() {
                return SingletonHolder.INSTANCE;
        }
}
Run Code Online (Sandbox Code Playgroud)

但是当我想调用的私有构造函数发生时会发生什么

 private Singleton(Object stuff) {... }
Run Code Online (Sandbox Code Playgroud)

我怎么传递stuffINSTANCE = new Singleton()?如在INSTANCE = new Singleton(stuff);

重写上面的代码段: …

java singleton android

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