小编Pra*_*ane的帖子

FacesContext#getCurrentInstance()在Filter#doFilter()中返回null

里面一个

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
Run Code Online (Sandbox Code Playgroud)

我想要使​​用会话

FacesContext.getCurrentInstance().getExternalContext().getSession(false);
Run Code Online (Sandbox Code Playgroud)

但我意识到FacesContext.getCurrentInstance()回报null.我知道我可以使用会话((HttpServletRequest) req).getSession(false)代替,但我的具体问题是:为什么是faces上下文nulldoFilter()方法是什么?

我正在使用MyFaces 1.1.

jsf servlet-filters

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

Kotlin:内部类的构造函数只能用包含类的接收者调用

我在Kotlin尝试内部课程并遇到了这个错误,但并不太明白.我试着看一下这里的文档,但是对外层类如何访问内部类构造函数没有任何指导

class OuterClass {

  fun someFun(): InnerClassSuper {
    return InnerClassX("Hello") //Error: Constructor of inner class InnerClassX can be called only with receiver of containing class
  }

  sealed class InnerClassSuper {

    inner class InnerClassX(val x: String): InnerClassSuper()

  }
}
Run Code Online (Sandbox Code Playgroud)

如果有人解释错误并指示如何解决错误,将不胜感激.谢谢.

constructor inner-classes kotlin

8
推荐指数
2
解决办法
2187
查看次数

Kotlin反射不可用

我试图从这个视频的第一个例子中学习高阶函数.这是我的代码和输出.

fun lowercase(value: String) = value.toLowerCase()

fun higherOrder(value:String, op: (String) -> String) : String {
    println("Executing higher order fun $op")
    return op(value)
}

fun main(args: Array<String>) {
    println(higherOrder("HELLO", ::lowercase))
    println(higherOrder("hello", {it -> lowercase(it)}))
    println(higherOrder("HeLlo", { x -> lowercase(x) }))
    println(higherOrder("Hello", { lowercase(it) }))
}
Run Code Online (Sandbox Code Playgroud)

产量

Executing higher order fun function lowercase (Kotlin reflection is not available)
hello
Executing higher order fun Function1<java.lang.String, java.lang.String>
hello
Executing higher order fun Function1<java.lang.String, java.lang.String>
hello
Executing higher order fun Function1<java.lang.String, java.lang.String> …
Run Code Online (Sandbox Code Playgroud)

higher-order-functions kotlin

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

如何查询Firebase Firestore参考数据类型?

我正在使用Firestore 参考数据类型来存储对用户的引用,如下面的屏幕截图所示

用户参考

在此输入图像描述

用户集合

在此输入图像描述

当我尝试查询这些数据时,我得到了一个ClassCastException(我String为了它而试图转换为一个).

//.. this function reads data from DocumentSnapshot
//.. and converts to an Organization
private fun DocumentSnapshot.toOrganization(): Organization {
  //.. some code
      (this.data["members"] as ArrayList<HashMap<String, Any>>).map { toOrgMember(it) })
  //.. more code
}

fun toOrgMember(map: Map<String, Any>): OrgMember {
  //map["user"] as String throws ClassCastException. Refer first screenshot
  return OrgMember(map["id"] as Long, UserRef(map["user"] as String), map["type"] as String,
      asJobTitlesList(map["jobTitles"] as String))
}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪

10-14 20:31:17.503 15569-15569/com.a.b W/System.err: Caused by: java.lang.ClassCastException: com.google.android.gms.internal.zzegf …
Run Code Online (Sandbox Code Playgroud)

android kotlin firebase google-cloud-firestore

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

如何从MutableLiveData发出不同的值?

我观察到观察者的MutableLiveData触发器onChanged,即使为其setValue方法提供了相同的对象实例也是如此。

//Fragment#onCreateView - scenario1
val newValue = "newValue"
mutableLiveData.setValue(newValue) //triggers observer
mutableLiveData.setValue(newValue) //triggers observer

//Fragment#onCreateView - scenario2
val newValue = "newValue"
mutableLiveData.postValue(newValue) //triggers observer
mutableLiveData.postValue(newValue) //does not trigger observer
Run Code Online (Sandbox Code Playgroud)

如果向setValue()/ 提供了相同或等效的实例,是否有办法避免两次通知观察者postValue()

我尝试扩展,MutableLiveData但是没有用。我可能在这里错过了一些东西

class DistinctLiveData<T> : MutableLiveData<T>() {

    private var cached: T? = null

    @Synchronized override fun setValue(value: T) {
        if(value != cached) {
            cached = value
            super.setValue(value)
        }
    }

    @Synchronized override fun postValue(value: T) {
        if(value != cached) { …
Run Code Online (Sandbox Code Playgroud)

android android-livedata mutablelivedata

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