小编ass*_*ias的帖子

Guice的目的

我(我想)理解依赖注入的目的,但我只是不明白为什么我需要Guice这样做(好吧,显然我不需要 Guice,但我的意思是为什么使用它会有好处).假设我有现有的(非Guice)代码,它是这样的:

public SomeBarFooerImplementation(Foo foo, Bar bar) {
    this.foo = foo;
    this.bar = bar;
}

public void fooThatBar() {
    foo.fooify(bar);
}
Run Code Online (Sandbox Code Playgroud)

在某个更高级别,也许在我的main()中,我有:

public static void main(String[] args) {
    Foo foo = new SomeFooImplementation();
    Bar bar = new SomeBarImplementation();
    BarFooer barFooer = new SomeBarFooerImplementation(foo, bar);

    barFooer.fooThatBar();
}
Run Code Online (Sandbox Code Playgroud)

现在我基本上得到了依赖注入的好处,对吧?更容易测试等等?当然,如果你想要,你可以轻松地更改main()以从配置而不是硬编码中获取实现类名.

据我了解,在Guice做同样的事情,我会做类似的事情:

public SomeModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Foo.class).to(SomeFooImplementation.class);
        bind(Bar.class).to(SomeBarImplementation.class);
        bind(BarFooer.class).to(SomeBarFooerImplementation.class);
    }
}

@Inject
public SomeBarFooerImplementation(Foo foo, Bar, bar) {
    this.foo = foo;
    this.bar = bar;
}

public static …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection guice

26
推荐指数
1
解决办法
1510
查看次数

寻找仅32位Microsoft公共控件(ListView)的替代品

我有一个在VBA/Excel中开发的遗留应用程序,它使用ListView控件.不幸的是,看起来这些控件不能与64位版本的Excel一起使用:

Office 2010中的本机64位进程无法加载32位二进制文​​件.这包括MSComCtl的常见控件[如ListViews].当代码迁移到64位Office 2010时,必须找到使用这些控件的现有Microsoft Office VBA解决方案的替代方法.

我需要将该遗留应用程序迁移到Excel 2010/13 x64.除了那些ListView控制之外,这个过程大多是无痛的.

我更换ListView控件的主要选择是什么?哪些是最有效的(从时间和难度实现的角度来看)?

笔记:

  • 这个问题已在MS论坛上提出,但没有给出实际答案.
  • 添加.net标签因为我怀疑某些解决方案可能来自那里.

为了更清楚,这里是Excel用户表单的快照.底部是列表视图(我隐藏了机密信息),它具有可排序的列,允许用户选择多个非连续的行.

在此输入图像描述

.net excel 64-bit vba listview

25
推荐指数
2
解决办法
5832
查看次数

23
推荐指数
2
解决办法
2603
查看次数

@override注释

@Override我实现接口时是否需要放置注释(不覆盖抽象类)?

又是什么@Override注解实现?

java

21
推荐指数
4
解决办法
2万
查看次数

如何永久增加java堆内存?

我有java堆内存的一个问题.我在java中开发了一个客户端服务器应用程序,它作为Windows服务运行,需要超过512MB的内存.我有2GB的RAM,但是当我运行我的应用程序时,它会引发异常

内存不足错误:java堆空间

但我已经在java控制面板中设置了堆大小(最大512MB),我仍然得到相同的错误.我无法通过命令行设置堆大小,因为我的应用程序作为Windows服务运行,所以如何增加默认堆大小?

java heap jvm heap-memory heap-dump

21
推荐指数
2
解决办法
13万
查看次数

关于可见性及时性的易失性的详细语义

考虑一下volatile int sharedVar.我们知道JLS为我们提供了以下保证:

  1. 写入线程的每个动作在w其写入值之前isharedVar程序顺序happens-before写入动作;
  2. 的值写入i通过w happens-before的成功读取isharedVar由读取线程r;
  3. 成功读取isharedVar由读线程r happens-before的所有后续行动r的程序顺序.

然而,仍有给出没有挂钟时间的保证,当读线程将观察值i.一个完全不会让读取线程看到该值的实现仍然符合此契约.

我已经考虑了一段时间,我看不到任何漏洞,但我认为必须有.请指出我的推理漏洞.

java volatile java-memory-model

21
推荐指数
1
解决办法
1086
查看次数

将JSONObject内的文件发送到REST WebService

我想发送一个文件到webservice,但我需要发送更多的信息,所以我想用json发送它们.但是当我把一个文件放在我的jsonObject中时,我得到一个错误,说它不是一个字符串.我的问题是,我应该拿我的文件并转换为字符串,然后放入我的json和Web服务中取出它并将该字符串转换为文件?还是有另一种简单的方法吗?

这是我的代码:

客户:

private void send() throws JSONException{
    ClientConfig config = new DefaultClientConfig();
    Client client = Client.create(config);
    client.addFilter(new LoggingFilter());
    WebResource service = client.resource("http://localhost:8080/proj/rest/file/upload_json");

    JSONObject my_data = new JSONObject();
    File file_upload = new File("C:/hi.txt");
    my_data.put("User", "Beth");
    my_data.put("Date", "22-07-2013");
    my_data.put("File", file_upload);

    ClientResponse client_response = service.accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, my_data);

    System.out.println("Status: "+client_response.getStatus());

    client.destroy();
}
Run Code Online (Sandbox Code Playgroud)

网络服务

@POST
@Path("/upload_json")

@Consumes(MediaType.APPLICATION_JSON)
@Produces("text/plain")

public String receive(JSONObject json) throws JSONException {

    //Here I'll save my file and make antoher things..
    return "ok";
}
Run Code Online (Sandbox Code Playgroud)

在所有答案之后,这是我的代码 - 谢谢大家:

网络服务

import java.io.File;
import java.io.FileOutputStream; …
Run Code Online (Sandbox Code Playgroud)

java rest json web-services

21
推荐指数
2
解决办法
6万
查看次数

跨多个包含块的Java变量 - 无法解析变量

我有jsp页面看起来像这样:

MyPage.jsp

<%@ include file = "/Title.jsp" %>
<%@ include file = "/Header.jsp" %>
<html>...</html>
Run Code Online (Sandbox Code Playgroud)

在Title.jsp中有一个"user"的实例,让我们说:

User user = new User();
Run Code Online (Sandbox Code Playgroud)

在Header.jsp中,用户被引用为

user.setName("John");
Run Code Online (Sandbox Code Playgroud)

Eclipse在header.jsp文件中显示"用户无法解析为变量"的错误.我完全理解为什么.有没有办法让Eclipse忽略这个特定变量的特定错误?有什么可以在这里完成的吗?

在工作中,我支持一些旧的(和大而丑陋的)Java应用程序,它实际上是一个Web应用程序.我正在尝试将此Java项目转换为Java动态Web项目.在我转换它之前,Eclipse并不关心这些悬挂变量到处都是.现在,在Dynamic Web Project中,Eclipse正在抱怨.

重写代码是不可能的.每个jsp文件由多个包含大量全局变量的文件组成.我不会触及它比我需要的更多.

java eclipse variables jsp include

20
推荐指数
2
解决办法
1万
查看次数

递归流

我想使用Java 8以递归方式列出计算机上的所有文件.

Java 8提供了listFiles一种返回所有文件和目录但没有递归的方法.如何使用它来获取完整的递归文件列表(不使用变异集合)?

我已经尝试了下面的代码,但它只有一个深度:

static Function<Path, Stream<Path>> listFiles = p -> {
    if (p.toFile().isDirectory()) {
        try { return Files.list(p); }
        catch (Exception e) { return Stream.empty(); }
    } else {
        return Stream.of(p);
    }
};

public static void main(String[] args) throws IOException {
    Path root = Paths.get("C:/temp/");
    Files.list(root).flatMap(listFiles).forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)

并且使用return Files.list(p).flatMap(listFiles);不编译(不确定为什么)...

注意:我对涉及FileVisitors或外部库的解决方案不感兴趣.

java recursion file java-8 java-stream

20
推荐指数
1
解决办法
7431
查看次数

在现代Java 8 API中使用位域而不是EnumSet的理由

EnumSet,就像enum它自身一样古老(自Java 5开始),应该是比特场的用例的非妥协替代品:像位域一样快速和精简(好吧,除了不是原始类型),以及类型安全的启动.另一方面,最新和多年来最受期待的Java API-Streams API - 毫不掩饰地使用了bitfields Spliterator特性.

我是否应该认为上述内容是核心Java专家的明确承认,EnumSet毕竟不是那么好?我是否应该重新考虑从不使用位域的常见最佳实践建议?

java enumset bit-fields java-8

19
推荐指数
1
解决办法
1282
查看次数