我总是很难将泛型与集合和通配符一起使用.
所以这是以下地图.我想保留特定类型的数据包类的处理程序集合.
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) 我有简单的形式
\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\nexport 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/角乌尔克尔
所以让我们有以下模块
现在,SharedModule
并MaterialModule
加载了 main AppModule
。两者都用于CustomModules
. 这些惰性模块的捆绑包包含SharedModule
并且MaterialModule
尽管这 2 个模块已加载到应用程序引导程序中。
有没有办法让“编译器知道”将提供给定的依赖项并且不需要将它包含在给定的包中?(如provided
范围 in Maven
)
从理论上讲,想象一下在您的 Angular 应用程序中有 X、Y、Z 延迟加载模块。
在某些时候,您决定所有这些模块都需要使用大小约为 1MB 的 3rd 方模块。自然地,您将添加imports: [ ... OurHeavyModule]
到所有 3 个模块中。
问题是 - 这会使 X、Y、Z 的块文件每个大整整 1MB 吗?或者也许打包器足够聪明,可以实际制作将被导入的额外块 - 但只有一次。
这是我第一次遇到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 …
我想知道以下情况的最佳方法是什么:
可以说,我们有一些工厂MyUtilFactory
返回MyUtil
类的缓存实例.多个实例MyUtil
在一个static Map<String,MyUtil> utilsCache
.
现在,懒惰创建的抽象流程应该如下:
utilsCache
为空,则执行第一次初始化 - 将实例加载到静态缓存映射.现在,步骤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
我有使用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还是尝试解决测试依赖性。
跳过测试执行时,如何从构建计划依赖关系解决步骤中排除测试依赖关系?
我的问题的可能答案位于此处: How can I检索外键从JPA ManyToOne映射而不命中目标表?
但是,更好的解决方案(属性访问)在我的情况下不起作用(我缺少列异常 - 为什么?)
该模型如下所示:实体Parent
和Child
。表具有表的parent
列child_id
,因此它是典型的关系。PK
child
@ManyToOne
现在的重点是,如果我获取实体,我需要在不获取实体的情况下Parent
访问FK
值(也称为实体)。我怎样才能做到这一点?PK
Child
Child
我使用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() …
有像这样的标记
<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组件中使用的完全有效的标记。
我有一组集成测试,包括图像文本识别和用户交互。对于测试,我使用静态图像而不是相机输入。我已包含这些图像,以便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)