标签: lazy-initialization

C++中的惰性/多阶段构造

在C++中,对于多阶段构造/初始化对象,有什么好的现有类/设计模式?

我有一个带有一些数据成员的类,应该在程序流程的不同点初始化,因此必须延迟它们的初始化.例如,可以从文件中读取一个参数,从网络中读取另一个参数.

目前我使用boost :: optional来延迟构建数据成员,但是让我感到烦恼的是,optional在语义上与delay-construct不同.

我需要提醒boost :: bind和lambda部分函数应用程序的功能,并且使用这些库我可以设计多阶段构造 - 但我更喜欢使用现有的测试类.(或许还有另一种我不熟悉的多阶段建筑模式).

c++ constructor boost lazy-initialization

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

init-on-first-use函数的gcc属性

我一直在使用gcc constpure属性来返回指向"常量"数据的函数,这些数据在第一次使用时被分配和初始化,即每次调用时函数将返回相同的值.作为一个例子(不是我的用例,但是一个众所周知的例子)想到一个函数,它在第一次调用时分配和计算trig查找表,并在第一次调用后返回指向现有表的指针.

问题:我被告知这种用法不正确,因为这些属性禁止副作用,并且如果不使用返回值,编译器甚至可以在某些情况下完全优化调用.我对const/ pureattributes的使用是安全的,还是有任何其他方法告诉编译器对该N>1函数的调用等效于对该函数的1次调用,但是该函数的1次调用是否等同于对函数的0调用?或者换句话说,该函数在第一次被调用时只有副作用?

c attributes gcc lazy-initialization

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

是否有Lazy <T>的无效版本?

我想使用Lazy<T>我的类中的行为来确保某个操作只发生一次.我之前做过这个,通过一个Lazy本质上调用一个Func做某事然后返回一个空值.我不关心返回值,我只是想确保事情只发生一次.

我在想它可以被称为Once.我会自己构建它并在Lazy内部使用它,如果它还不存在,但我想在做之前先问一下.谢谢!

.net lazy-initialization

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

Lazy <T>是否应该优先选择getter中的延迟初始化?

从.NET 4开始,Lazy<T>可以用来懒惰地初始化对象.直观地,懒惰初始化也可以在公共属性的getter中执行,以向调用者提供相同的功能.我想知道是否Lazy<T>提供了后者的任何固有优势,因此应该优先考虑?

就个人而言,我觉得Lazy<>可以迅速降低代码的可读性,但也许我刚看到它被误用了.从好的方面来说,它确保了线程的安全性,但是有很多.NET同步结构 - 也许我错了 - 让它很容易在getter中实现相同的功能.

选择最佳方法时需要注意哪些注意事项?

.net c# lazy-initialization

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

延迟初始化类型没有公共无参数构造函数

我正在尝试在 youtube 中实现一个示例,导师做对了,但我遇到了错误。
我已经有一个私有构造函数,我的代码中不能有公共构造函数。

private static int _InstanceCount = 0;

private SingletonDemo1()
{
    _InstanceCount++;
    Console.WriteLine("Instance Count: " + _InstanceCount.ToString());
}

private static readonly Lazy<SingletonDemo1> _Instance = new Lazy<SingletonDemo1>();

public static SingletonDemo1 Instance
{
    get
    {                               
        return _Instance.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# lazy-initialization

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

构造函数注入期间 Dagger Lazy

我意识到Lazy使用 Dagger 完成注入的推荐方法是添加Lazy到字段注入点。例如,

class Foo {
    @Inject lateinit var bar: Lazy<Bar>

    fun useBar() = bar.get().doSomething()
}
Run Code Online (Sandbox Code Playgroud)

使用构造函数注入怎么样?我还没有看到有人这样做。

class Foo @Inject constructor(private val fizz: Fizz,
                              private val bar: Lazy<Bar>) {    
    fun useBar() = bar.get().doSomething()
}
Run Code Online (Sandbox Code Playgroud)

总结一下,在进行 Dagger 延迟注入时,我可以Lazy<Bar>在构造函数中使用吗?或者我唯一的选择是转移Lazy<Bar>到字段注入,同时将其他非惰性依赖项保留在通过构造函数注入的同一类中?

感谢您的指点!

lazy-initialization kotlin dagger dagger-2

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

如何使CDI bean懒洋洋地初始化?

我正在使用CDI 1.0的Weld实现,我找不到如何在Spring中使用bean的方式(使用@Lazylazy-init在XML中).有没有办法告诉CDI Injector不要在启动时初始化bean?

spring cdi lazy-initialization

6
推荐指数
3
解决办法
3165
查看次数

Swift 2.0:推断闭包类型错误

我收到错误

无法在当前上下文中推断闭包类型

在使用Swift 1.2的代码中

private lazy var _messagesVC =  { return MessagesViewController(nibName:"MessagesViewController",bundle:nil)}()
Run Code Online (Sandbox Code Playgroud)

整个视图控制器,我收到此错误

import UIKit
class FriendsViewController: UIViewController {

@IBOutlet weak var containerView: UIView!
@IBOutlet weak var segmentContainerView: UIView!
private lazy var _connectionVC  =  { return FriendsConnectionViewController(nibName:"FriendsConnectionViewController",bundle:nil)}()
private lazy var _messagesVC =  { return MessagesViewController(nibName:"MessagesViewController",bundle:nil)}()


override func viewDidLoad() {
    super.viewDidLoad()
    self.selectedControllerFrom(index: 0)
     // Do any additional setup after loading the view.
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

}

func selectedControllerFrom(index index:UInt)
{
    var vc:UIViewController?
    switch index{
    case 0: vc …
Run Code Online (Sandbox Code Playgroud)

types init lazy-initialization swift

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

Android懒惰数据绑定可能吗?

Android数据绑定支持最酷的功能之一是它还为View设置了ID字段.这样可以整理代码库,因为不需要字段或findViewById()调用.

但问题是绑定实例只能通过bind()调用来检索,该调用往往会调度绑定.当异步接收数据并且通常NullPointerException抛出数据时,这是不好的.

可以检索带有View字段的绑定实例减去实际的数据绑定过程吗?

堆栈跟踪:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
         at com.app.android.databinding.ActivityRestaurantDetailsBinding.executeBindings(ActivityRestaurantDetailsBinding.java:381)
         at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:350)
         at android.databinding.ViewDataBinding$6.run(ViewDataBinding.java:167)
         at android.databinding.ViewDataBinding$5.onViewAttachedToWindow(ViewDataBinding.java:137)
         at android.view.View.dispatchAttachedToWindow(View.java:14525)
Run Code Online (Sandbox Code Playgroud)

android lazy-initialization android-databinding

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

Property Wrapper @Lazy 变量线程安全吗?

我们现在有了一种创建惰性变量的新方法。它在swift-evolution/proposals/0258-property-wrappers.md 中有描述:

@propertyWrapper
enum Lazy<Value> {
    case uninitialized(() -> Value)
    case initialized(Value)

    init(wrappedValue: @autoclosure @escaping () -> Value) {
        self = .uninitialized(wrappedValue)
    }

    var wrappedValue: Value {
        mutating get {
            switch self {
            case .uninitialized(let initializer):
                let value = initializer()
                self = .initialized(value)
                return value
            case .initialized(let value):
                return value
            }
        }
        set {
            self = .initialized(newValue)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它是线程安全的实现吗?如果没有,如何重现非线程安全行为?

generics lazy-evaluation lazy-initialization swift property-wrapper

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