小编Ant*_*sss的帖子

如何声明泛型处理程序的泛型multitype集合

我总是很难将泛型与集合和通配符一起使用.

所以这是以下地图.我想保留特定类型的数据包类的处理程序集合.

private ConcurrentHashMap<Class<? extends Packet>, List<PacketListener<? extends Packet>>> listeners = new ConcurrentHashMap<>();
Run Code Online (Sandbox Code Playgroud)

而且 PacketListener

public interface PacketListener<T extends Packet> {

    public void onOutgoingPacket(Streamer streamer, T packet);

    public void onIncomingPacket(Streamer streamer, T packet);
}
Run Code Online (Sandbox Code Playgroud)

现在我想做的是根据传入的数据包类获取侦听器,如下所示:

public <T extends Packet> void addPacketListener(Class<T> clazz, PacketListener<T> listener) {
    if (listeners.containsKey(clazz) == false) {
        listeners.putIfAbsent(clazz, new LinkedList<PacketListener<T>>());  // ERROR
    }
    List<PacketListener<? extends Packet>> list = listeners.get(clazz);
    list.add(listener);
}

public <T extends Packet> List<PacketListener<T>> getPacketListeners(Class<T> clazz) {
    List<PacketListener<T>> list = listeners.get(clazz);// ERROR
    if (list == …
Run Code Online (Sandbox Code Playgroud)

java generics

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

为什么我无法从 NgForm 获取表单控制

我有简单的形式

\n\n
<form novalidate #f="ngForm">\n  <mat-form-field class="example-full-width">\n    <input matInput placeholder="Favorite food" name="myname" required [(ngModel)]="comment">\n    <mat-error>Is required lol</mat-error>\n  </mat-form-field>\n\n  <mat-form-field class="example-full-width">\n    <input matInput placeholder="Favorite food" required name="some">\n  </mat-form-field>\n</form>\n
Run Code Online (Sandbox Code Playgroud)\n\n

和组件作为

\n\n
export class InputOverviewExample {\n  comment = null;\n  @ViewChild(\'f\')\n  form: NgForm\n\n\n  ngOnInit() {\n    console.log(this.form.controls);\n    console.log(Object.keys(this.form.controls));\n\n    console.log(this.form.controls.myname);\n    console.log(this.form.controls[\'myname\']);\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是,控制台输出是:

\n\n
{}\n\xe2\x80\x8b\n    myname: Object { pristine: true, touched: false, status: "INVALID", \xe2\x80\xa6 }\n        Array []\n        undefined\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么为什么我无法按名称访问表单控件,为什么Object.keys在控制台说有一些键时返回空数组form.controls??\n这是一个游乐场,所以请忽略重复的表单输入等。\n https://stackblitz.com/edit/角乌尔克尔

\n

angular

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

如何防止共享模块在 Angular/Webpack 中的延迟加载模块中重复?

所以让我们有以下模块

  1. AppModule - CLI 生成的主模块
  2. 共享模块
  3. 材料模块
  4. CustomModuleA - 延迟加载
  5. CustomModuleB - 延迟加载

现在,SharedModuleMaterialModule加载了 main AppModule。两者都用于CustomModules. 这些惰性模块的捆绑包包含SharedModule并且MaterialModule尽管这 2 个模块已加载到应用程序引导程序中。

有没有办法让“编译器知道”将提供给定的依赖项并且不需要将它包含在给定的包中?(如provided范围 in Maven

webpack angular-cli angular

6
推荐指数
0
解决办法
180
查看次数

导入的模块是否捆绑到 Angular 中的模块块文件中

从理论上讲,想象一下在您的 Angular 应用程序中有 X、Y、Z 延迟加载模块。

在某些时候,您决定所有这些模块都需要使用大小约为 1MB 的 3rd 方模块。自然地,您将添加imports: [ ... OurHeavyModule]到所有 3 个模块中。

问题是 - 这会使 X、Y、Z 的块文件每个大整整 1MB 吗?或者也许打包器足够聪明,可以实际制作将被导入的额外块 - 但只有一次。

angular

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

为什么在Linux上存在FileNotFoundException时抛出它

这是我第一次遇到Java上的Java文件访问问题.问题就像标题所说 - FileNotFoundException文件实际存在时抛出.此外,具有相同配置的应用程序(props.txt文件)在Windows上运行应该如此.让我提供一些控制台输出

datasu@dedi2392:~/netcrawler/dkpto$ ls -l
total 20
-rwxrw-rw- 1 datasu datasu  114 Aug  7 15:53 autoupdate
drwxr-xr-x 4 datasu datasu 4096 Aug  8 11:57 data
drwxr-xr-x 2 datasu datasu 4096 Aug  8 11:57 log
-rw-rw-rw- 1 datasu datasu   32 Aug  8 12:44 props.txt
-rwxrw-rw- 1 datasu datasu  126 Aug  8 12:55 propsUpdate
datasu@dedi2392:~/netcrawler/dkpto$ ./propsUpdate
Parent: /usr/home/datasu/netcrawler/dkpto
   1# -> propsUpdate
   2# -> autoupdate
   3# -> props.txt
   4# -> data
   5# -> log
 (No such file or directory)ava.io.FileNotFoundException: /usr/home/datasu/netcrawler/dkpto/props.txt
        at …

java linux file

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

如何在线程安全延迟初始化期间避免持续同步(不是单例解决方案)?

我想知道以下情况的最佳方法是什么:

可以说,我们有一些工厂MyUtilFactory返回MyUtil类的缓存实例.多个实例MyUtil在一个static Map<String,MyUtil> utilsCache.

现在,懒惰创建的抽象流程应该如下:

  1. 如果缓存utilsCache为空,则执行第一次初始化 - 将实例加载到静态缓存映射.
  2. 从缓存中获取实例
  3. 检查检索的实例是否已初始化
  4. 如果实例未初始化,则执行实例​​初始化(昂贵)
  5. 返回实例.

现在,步骤1和4需要同步,因为初始化是耗时的并且它将被执行多次,但是仅需要第一次初始化缓存和实例.

很容易将所有内容放在同步块(甚至方法)中,根本不存在任何问题,但是我希望避免在不需要的情况下进行同步.

一种方法就是这样

        if (!someObject.isInitialized()) { // check if it is ready without synchonization
            synchronized (someObject) { // its not ready so lets synchronize from here
                if (!someObject.isInitialized()) { //first thread will get the samo outcome, but other threads will not
                    performInitialization();
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

现在,在synchronized块中重复条件的重点是允许第一个线程进行初始化.任何后续线程将等待第一个线程完成初始化,而不是条件为synchronized,如果不满足statment.它可以像这样完成它并且运作良好,但我认为这不是最好和最优雅的方法来解决这个问题.我的问题是,如何做到"正确的方式"

java concurrency multithreading synchronization lazy-initialization

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

如何从构建中排除{test}范围内的依赖项?

我有使用maven构建的Java项目,该项目具有一些依赖性。这样的依赖项之一是另一个项目(我想到了Eclipse工作区),并且仅在test范围内。

    <dependency>
        <groupId>my.group.id</groupId>
        <artifactId>artifactid</artifactId>
        <version>1.0</version>
        <scope>test</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我在项目根目录下使用以下命令构建项目

mvn clean package -Dmaven.test.skip=true
Run Code Online (Sandbox Code Playgroud)

我期望发生的事情是,maven将构建项目,而将测试依赖项留在后面。但是,抛出未解决的依赖项异常(未解析为我的test作用域依赖项)。当我运行带有-X选项的构建命令时,在项目构建计划中发现了以下报告:

[DEBUG] Dependencies (collect): []
[DEBUG] Dependencies (resolve): [compile, runtime, test]
[DEBUG] Repositories (dependencies): [central (http://repo.maven.apache.org/maven2, releases)]
[DEBUG] Repositories (plugins)     : [central (http://repo.maven.apache.org/maven2, releases)]
[DEBUG] -----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

因此,尽管跳过了测试,甚至编译了它们(mvn clean compile运行良好),但maven还是尝试解决测试依赖性。

跳过测试执行时,如何从构建计划依赖关系解决步骤中排除测试依赖关系?

maven-3 maven

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

JPA + Hibernate - 如何在不获取子实体的情况下获取子实体的 FK?

我的问题的可能答案位于此处: How can I检索外键从JPA ManyToOne映射而不命中目标表?

但是,更好的解决方案(属性访问)在我的情况下不起作用(我缺少列异常 - 为什么?)

该模型如下所示:实体ParentChild。表具有表的parentchild_id,因此它是典型的关系。PKchild@ManyToOne

现在的重点是,如果我获取实体,我需要在不获取实体的情况下Parent访问FK值(也称为实体)。我怎样才能做到这一点?PKChildChild

我使用Annotations并且我的映射如下所示:

@Entity
@Table(name = "parent")
public class Parent extends AbstractEntity {

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "patent_id", nullable = true)
private Child child;

@Column(name="child_id",insertable=false,updatable=false)
private Integer childId;

public Child getChild() {
    return patent;
}

public void setChild(Child child) {
    this.child = child;
}


public Integer getChildId(){
    return childId;
}
}
Run Code Online (Sandbox Code Playgroud)

我想做的是调用parent.getChild().getId() …

java hibernate jpa

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

有没有一种方法可以在Typescript和Angular中为“ let variable”类型键入IDE提示?

有像这样的标记

    <mat-cell *matCellDef="let request">
         <a [href]="request.url" target="_blank">{{request.requestId}}</a>
    </mat-cell>
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式键入IDE的请求类型Request吗?我在这里使用IntelliJ。

请注意,我这里使用的是Angular Material表,因此request在此处声明组件不是一个选择,因为它纯粹是模板变量。它包含在每次行迭代时由组件本身内部提供的行数据。

知道为什么不推荐使用它,但是可能是因为它看起来像无效的标记-很好,它是MatDataTable组件中使用的完全有效的标记。

intellij-idea angular

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

如何在 Flutter 中添加仅在集成测试中捆绑的资产

我有一组集成测试,包括图像文本识别和用户交互。对于测试,我使用静态图像而不是相机输入。我已包含这些图像,以便assets能够通过 访问测试中的图像rootBundle。但现在,这些将包含在应用程序的生产版本中。

如何添加仅用于测试的资产?

flutter:
  assets: #I need those to be bundled for tests but not for production build
    - ./test/resources/
    - ./test/resources/barcodes/
Run Code Online (Sandbox Code Playgroud)

flutter

5
推荐指数
0
解决办法
151
查看次数