是否可以要求TypeVarmypy 中的 a 仅解析为非Optional类型?例如
from typing import Callable, Optional, TypeVar
from typing_extensions import Protocol
T = TypeVar('T')
def mapper(callabl: Callable[..., T]) -> T:
return callabl()
def bad_function() -> Optional[int]:
return None
mapper(reveal_type(bad_function))
Run Code Online (Sandbox Code Playgroud)
在此示例中,bad_function显示为 类型def () -> Union[builtins.int, None]。我想要一种方法来限制T绑定到任何不可选的类型(即不是Unionwith None),这样该代码片段将无法进行类型检查。Typescript(和 Kotlin 的内置类型系统)等其他检查器默认支持这一点,所以我想知道是否也可以在 mypy 中执行此操作。我知道可以绑定TypeVars,但我无法弄清楚在这种情况下绑定什么是正确的T。
我在onLoadFinished回调(from LoaderManager.LoaderCallbacks)上返回了一个游标,我想对这个游标进行一些(可能是昂贵的)后处理.所以,我正在开火AsyncTask使用这个Cursor.但是,我遇到了这种异常的间歇性崩溃:
android.database.StaleDataException: Attempted to access a cursor after it has been closed.
Run Code Online (Sandbox Code Playgroud)
我怀疑这种情况正在发生,因为游标(由UI线程中的Loader管理)在后台线程完成之前正在关闭,因为这是一个托管游标.这是一些释义代码:
private class LoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
@Override
public void onCreateLoader(int d, Bundle args) {
return new CursorLoader(context, uri, projection, selection, selectionArgs, sortOrder);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
processCursor(cursor)
}
}
private void processCursor(final Cursor cursor) {
new AsyncTask<Void, Void, Result> {
@Override
Result doInBackground(Void... params) {
while(cursor.isAfterLast() == false) {
// doing some costly things with cursor …Run Code Online (Sandbox Code Playgroud) 我最近在后端将 Moshi 替换为 Gson,该后端预计将具有可为空值的响应序列化为{ "value": null },而不是{}.
默认情况下 Moshi 和 Gson 都不这样做,但 Gson 可以选择直接在构建器中执行此操作:
Gson gson = new GsonBuilder().serializeNulls().create().
Moshi 是否支持类似的东西?