小编oli*_*ren的帖子

Class.getResource()和ClassLoader.getResource()有什么区别?

我想知道Class.getResource()和之间的区别是什么ClassLoader.getResource()

编辑:我特别想知道文件/目录级别是否涉及任何缓存.如"在类版本中缓存的目录列表?"

以下AFAIK应该基本上做同样的事情,但它们不是:

getClass().getResource() 
getClass().getClassLoader().getResource()
Run Code Online (Sandbox Code Playgroud)

我在摆弄一些报告生成代码时发现了这一点,该代码WEB-INF/classes/从该目录中的现有文件创建了一个新文件.当使用Class中的方法时,我可以找到部署时使用的文件getClass().getResource(),但在尝试获取新创建的文件时,我收到了一个null对象.浏览目录会清楚地显示新文件存在.文件名前面带有正斜杠,如"/myFile.txt"中所示.

另一方面,ClassLoader版本getResource()确实找到了生成的文件.根据这种经验,似乎存在某种目录列表的缓存.我是对的,如果是的话,这会记录在哪里?

API文档Class.getResource()

查找具有给定名称的资源.搜索与给定类关联的资源的规则由类的定义类加载器实现.此方法委托给此对象的类加载器.如果此对象由引导类加载器加载,则该方法委托给ClassLoader.getSystemResource(java.lang.String).

对我来说,这是"Class.getResource真正调用它自己的类加载器的getResource()".这和做的一样getClass().getClassLoader().getResource().但显然不是.有人可以请我为此事提供一些启示吗?

java classloader getresource

186
推荐指数
5
解决办法
14万
查看次数

'string' 不能用于索引类型 '{}'

我有以下 React 组件,可从对象数组生成 HTML 表。应该显示的列是通过tableColumns属性定义的。

当循环items并显示正确的列时,我必须使用对象 ( ) 中的key属性,但打字稿生成以下错误:tableColumn{item[column.key]}

元素隐式具有 'any' 类型,因为类型 'string' 的表达式不能用于索引类型 '{}'。在类型“{}”上找不到带有“字符串”类型参数的索引签名。

我能做些什么来解决这个问题?我迷路了

我如何调用组件:

<TableGridView
  items={[
    {
      id: 1,
      name: 'John Doe',
      email: 'john@doe.de'
    },
    {
      id: 2,
      name: 'Lorem ipsum',
      email: 'lorem@ipsum.com',
    }
  ]}
  tableColumns={[
    {
      key: 'id',
      label: 'ID',
    },
    {
      key: 'name',
      label: 'Name',
    }
  ]}
/>
Run Code Online (Sandbox Code Playgroud)

我的组件:

export type TableColumn = {
  key: string,
  label: string,
};

export type TableGridViewProps = {
  items: object[],
  tableColumns: …
Run Code Online (Sandbox Code Playgroud)

javascript typescript reactjs

62
推荐指数
4
解决办法
7万
查看次数

带有通配符的列表会导致Generic voodoo错误

有谁知道为什么下面的代码不能编译?add()和addAll()都不能按预期工作.删除"?extends"部分会使一切正常,但之后我将无法添加Foo的子类.

 List<? extends Foo> list1 = new ArrayList<Foo>();
 List<? extends Foo> list2 = new ArrayList<Foo>();

 /* Won't compile */
 list2.add( new Foo() ); //error 1
 list1.addAll(list2);    //error 2 
Run Code Online (Sandbox Code Playgroud)

错误1:

IntelliJ说:

add(capture<? extends Foo>) in List cannot be applied to add(Foo)
Run Code Online (Sandbox Code Playgroud)

编译器说:

cannot find symbol
symbol  : method addAll(java.util.List<capture#692 of ? extends Foo>)
location: interface java.util.List<capture#128 of ? extends Foo>
Run Code Online (Sandbox Code Playgroud)

错误2:

IntelliJ给了我

addAll(java.util.Collection<? extends capture<? extends Foo>>) in List cannot be applied to addAll(java.util.List<capture<? extends Foo>>)
Run Code Online (Sandbox Code Playgroud)

而编译器只是说

cannot find symbol
symbol …
Run Code Online (Sandbox Code Playgroud)

java generics generic-list generic-collections

37
推荐指数
3
解决办法
2万
查看次数

如何将复杂对象作为参数传递给RESTful服务?

我已成功设置了一个快速测试,创建一个"类似REST"的服务,返回一个序列化为JSON的对象,这非常简单快捷(基于这篇文章).

但是,虽然返回JSON-ified对象很容易像桃子一样,但我还没有看到任何处理非基本输入参数的例子.如何将复杂对象作为参数传递?我正在使用Apache CXF,但是欢迎使用像Jackson这样的其他框架的例子:)

客户端可能类似于构建javascript对象,将其传递给JSON.stringify(complexObj),并将该字符串作为参数之一传递.

该服务可能看起来像这样

@Service("myService")
class RestService {
    @GET
    @Produces("application/json")
    @Path("/fooBar")
    public Result fooBar(@QueryParam("foo") double foo, @QueryParam("bar") double bar,
        @QueryParam("object") MyComplex object) throws WebServiceException {
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

将序列化对象作为参数发送可能会快速触及Internet Explorer强加的2KB URL限制.您是否建议在这些情况下使用POST,我是否需要在函数定义中进行更改?

json cxf parameter-passing deserialization

36
推荐指数
2
解决办法
9万
查看次数

TS 2540: Cannot assign to style because it is a read-only property

I am creating a textarea element in my TSX markup, and the TS typechecker in Vim complains 2540: Cannot assign to style because it is a read-only property. Having textarea.style be read-only is a bit weird, given that it can be written to ...

维姆错误 How can I make the error message disappear? Should I cast the input variable in my code to something else?

typescript

24
推荐指数
3
解决办法
3万
查看次数

是否可以通过"假"请求直接从代码中调用Express Router?

这个问题相关,我想知道是否有一种方法可以在没有实际通过HTTP的情况下触发Express Router?

routing node.js express run-middleware

17
推荐指数
3
解决办法
8836
查看次数

如何检查2个线段是否相交?

如何检查2个线段L1(p1,p2)和L2(p3,p4)是否相互交叉?我不需要交叉点,我只需要知道它们是否相交.由于我的应用程序计算了很多,我需要找到一个快速的解决方案.

谢谢

java math

15
推荐指数
2
解决办法
3万
查看次数

在没有 babel 的情况下对原生 ES 模块的导出进行存根

我正在使用 AVA + sinon 来构建我的单元测试。由于我需要 ES6 模块并且我不喜欢 babel,因此我在整个项目中使用 mjs 文件,包括测试文件。我使用“--experimental-modules”参数来启动我的项目,并在测试中使用“esm”包。以下是我的ava配置和测试代码。

  "ava": {
    "require": [
      "esm"
    ],
    "babel": false,
    "extensions": [
      "mjs"
    ]
  },


// test.mjs
import test from 'ava';
import sinon from 'sinon';
import { receiver } from '../src/receiver';
import * as factory from '../src/factory';

test('pipeline get called', async t => {
  const stub_factory = sinon.stub(factory, 'backbone_factory');
  t.pass();
});
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息:

  TypeError {
    message: 'ES Modules cannot be stubbed',
  }
Run Code Online (Sandbox Code Playgroud)

如何在没有 babel 的情况下存根 ES6 模块?

node.js sinon ecmascript-6 ava es6-modules

13
推荐指数
1
解决办法
8122
查看次数

是否可以使用JAX-RS设置ETag而无需使用Response对象?

在我发现的关于JAX-RS和缓存的少数几个问题(有答案)中,生成ETag(用于缓存)的答案是在Response对象上设置一些值.如下所示:

@GET
@Path("/person/{id}")
public Response getPerson(@PathParam("id") String name, @Context Request request){
  Person person = _dao.getPerson(name);

  if (person == null) {
    return Response.noContent().build();
  }

  EntityTag eTag = new EntityTag(person.getUUID() + "-" + person.getVersion());

  CacheControl cc = new CacheControl();
  cc.setMaxAge(600);

  ResponseBuilder builder = request.evaluatePreconditions(person.getUpdated(), eTag);

  if (builder == null) {
    builder = Response.ok(person);
  }

  return builder.cacheControl(cc).lastModified(person.getUpdated()).build();
}
Run Code Online (Sandbox Code Playgroud)

问题是对我们不起作用,因为我们对SOAP和REST服务使用相同的方法,通过使用@WebMethod(SOAP),@ GET(以及我们可能需要公开服务的任何其他方法)来注释方法.以前的服务对我们来说是这样的(不包括标题的创建):

@WebMethod
@GET
@Path("/person/{id}")
public Person getPerson(@WebParam(name="id") @PathParam("id") String name){
  return _dao.getPerson(name);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法 - 通过一些额外的配置 - 设置这些标题?这是我第一次发现使用Response对象实际上只比自动转换有一些好处...

我们正在使用Apache CXF.

java etag caching cxf jax-rs

12
推荐指数
1
解决办法
5991
查看次数

在TextField中设置占位符的样式

文本字段 API没有提及一个可以如何样式输入元素的伪占位符元素任何东西.

基本上,我想更改占位符文本的默认样式,并且正常的技巧包不起作用,因为我无法访问该元素.

有没有办法可以达到目的?如果是这样,JSS/React/DOM等效的写作方式是::-webkit-input-placeholder什么?

html css3 material-ui jss

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