小编mik*_*ike的帖子

关于书籍示例的问题 - Java 并发实践,清单 4.12

我正在实践 Java 并发中的一个示例,但不明白为什么在以下代码中需要并发安全容器。

我没有看到容器“locations”的状态在构建后如何修改;因此,由于它是通过“不可修改的Map”包装器发布的,因此在我看来,普通的 HashMap 就足够了。

EG,它是并发访问的,但是map的状态只有读者访问,没有作者访问。映射中的值字段通过委托给“SafePoint”类来同步,因此虽然点是可变的,但映射中的哈希键及其关联值(对 SafePoint 实例的引用)永远不会改变。

我认为我的困惑是基于问题中集合的确切状态。

谢谢!!-麦克风

清单 4.12,实践中的 Java 并发(此清单可在此处以 .java 形式提供,也可通过 google 以章节形式提供)

/////////////开始代码

@ThreadSafe
public class PublishingVehicleTracker {

private final Map<String, SafePoint> locations;
private final Map<String, SafePoint> unmodifiableMap;

public PublishingVehicleTracker(
                        Map<String, SafePoint> locations) {
    this.locations
        = new ConcurrentHashMap<String, SafePoint>(locations);
    this.unmodifiableMap
        = Collections.unmodifiableMap(this.locations);
}

public Map<String, SafePoint> getLocations() {
    return unmodifiableMap;
}

public SafePoint getLocation(String id) {
    return locations.get(id);
}

public void setLocation(String id, int x, int y) {
    if (!locations.containsKey(id))
        throw …
Run Code Online (Sandbox Code Playgroud)

java synchronization immutability

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

C#0(减号)uint =无符号结果?

public void Foo(double d){
    // when called below, d == 2^32-1 
    ...
}
public void Bar(){
    uint ui = 1;
    Foo( 0 - ui );
}
Run Code Online (Sandbox Code Playgroud)

我希望0和ui都能在这里升级为签名多头.

是的,使用0字面值,在编译时可以知道转换为uint是安全的,

但我想这一切似乎都错了.至少应发出警告.

谢谢!

语言规范是否涵盖了这样的半模糊情况?

c# operators

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

pydantic 转换为 jsonable dict(不是完整的 json 字符串)

我想pydantic用于在 api 和数据存储之间处理数据(双向),因为它很好地支持我关心的几种类型,这些类型不是原生的 json-serializable。它比当前方法具有更好的读取/验证支持,但我还需要创建 json-serializabledict对象来写出。

from uuid import UUID, uuid4
from pydantic import BaseModel

class Model(BaseModel):
    the_id: UUID

instance = Model(the_id=uuid4())
print("1: %s" % instance.dict()
print("2: %s" % instance.json()
Run Code Online (Sandbox Code Playgroud)

印刷

{'the_id': UUID('4108356a-556e-484b-9447-07b56a664763')}
>>> inst.json()
'{"the_id": "4108356a-556e-484b-9447-07b56a664763"}'
Run Code Online (Sandbox Code Playgroud)

我喜欢以下内容:

{"the_id": "4108356a-556e-484b-9447-07b56a664763"} # eg "json-compatible" dict
Run Code Online (Sandbox Code Playgroud)

看来,虽然pydantic拥有所有的映射,但是我找不到序列化的任何使用标准之外json〜递归编码器(json.dumps( ... default=pydantic_encoder))的pydantic/main.py。但我更愿意保留一个库来验证 raw->obj(pydantic 在这方面很棒)以及 obj->raw(dict),这样我就不必管理多个序列化映射。我想我可以实现类似于json使用编码器的东西,但这应该是一个常见的用例吗?

其他方法,例如dataclasses(builtin)+ 库,例如dataclasses_jsonschema向 提供此 ~ 序列化json-ready dict,但同样希望使用 pydantic 进行更强大的输入验证,同时保持对称。

python jsonserializer python-3.x pydantic

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

swift / openapi中“内容”的含义是“响应”:

使用扬鞭/ OpenAPI的(随后招摇,代码生成),我一直没能找到有什么区别应该是之间

这是从https://swagger.io/specification/#responsesObject获取的 (第一个示例,json格式)

"responses" : {
  "200": {
    "description": "a pet to be returned",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Pet"
} } } } }
Run Code Online (Sandbox Code Playgroud)

"responses" : {
  "200": {
    "description": "a pet to be returned",
    "schema": {
      "$ref": "#/components/schemas/Pet"
} } }
Run Code Online (Sandbox Code Playgroud)

我已将此示例放入一个简单的json swagger规范(json)中,并运行Swagger-Codegen(python,flask)来生成我的控制器和模型。Yaml似乎是首选的内部表示形式,因此当生成器运行时,它将创建一个yaml文件。

对于前者,响应类型为“无”

responses:
  200:
    description: "a pet to be returned"
Run Code Online (Sandbox Code Playgroud)

而后者产生了我认为我应该期望的:

responses:
  200:
    description: "a pet to be returned"
    schema:
      $ref: "#/components/schemas/Pet"
Run Code Online (Sandbox Code Playgroud)

例如,似乎使用以下语法从第一个语法中省略了模式 Content

内容是什么意思?我在示例中缺少什么,为什么Content结果没有返回Non-None返回类型和相应的模式。

请注意SwaggerCodgen:生成的代码与生成的yaml所说的完全匹配,因此在这里我没有包括任何这些细节

yaml swagger swagger-codegen

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