我的问题是静态关键字的一个特定用法.可以使用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它抱怨的关键字,因为变量a是final.但是,可以删除两个final和static关键字并使其编译.
这两种方式让我感到困惑.我怎么能有一个不属于任何方法的代码部分?如何调用它?一般来说,这种用法的目的是什么?或者更好,我在哪里可以找到关于此的文档?
我已经尝试过几次了解Singleton是什么.也许我只是太过视觉化......所以任何人都可以用一个简单的比喻来分解它.
类似帖子:
我有一个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
我有一个类(RInterfaceHL)调用另一个类(JRIEngine),它在单线程应用程序上提供本机方法.因此,我只希望每个JVM都有一个类的实例(RInterfaceHL).
我可以使用带有静态初始化的单例模式来确保只有RInterfaceHL的单个实例化,但是RInterfaceHL需要构造一个JRIEngine实例并为其提供一个loopback参数.如何以线程安全的方式提供单个RInterfaceHL实例,该实例接受用于构造单个JRIEngine的loopback参数?我正在使用JDK6.
注意:这个类似命名的问题没有回答我的问题.
我正在建立一个基于约书亚建设者模式的建设者.我的问题是如何让它成为单身人士?详细阐述我的观点,如果我有下面的建设者
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类中.有什么想法吗?
我有一个将作为单身人士的课程.
该类将获取一个文件作为构造函数的一部分.之后,课程准备好了.
因此,目前我使用双重检查锁定惯用法并通过static getInstance()经典方式获得单例的实例.
我的问题是,目前我经常这样做:
MySingleton.getInstance(theFile);
并且theFile仅在第一次构造单身时才需要.在那之后,即一旦构建了单身人士,我就不需要传递theFile.
我该怎么办?
我想创建一个MySingleton.getInstance(); 但仍然无法工作,因为调用者必须MySingleton.getInstance(theFile); 第一次调用构造一个有效的类.
我怎样才能更好地设计它?
我需要在 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)我想使用以下模式在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)
我怎么传递stuff给INSTANCE = new Singleton()?如在INSTANCE = new Singleton(stuff);
重写上面的代码段: …
java ×5
singleton ×5
javascript ×2
oop ×2
android ×1
builder ×1
concurrency ×1
es6-class ×1
static ×1
typescript ×1