我(我想)理解依赖注入的目的,但我只是不明白为什么我需要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) 我有一个在VBA/Excel中开发的遗留应用程序,它使用ListView控件.不幸的是,看起来这些控件不能与64位版本的Excel一起使用:
Office 2010中的本机64位进程无法加载32位二进制文件.这包括MSComCtl的常见控件[如ListViews].当代码迁移到64位Office 2010时,必须找到使用这些控件的现有Microsoft Office VBA解决方案的替代方法.
我需要将该遗留应用程序迁移到Excel 2010/13 x64.除了那些ListView控制之外,这个过程大多是无痛的.
我更换ListView控件的主要选择是什么?哪些是最有效的(从时间和难度实现的角度来看)?
笔记:
.net标签因为我怀疑某些解决方案可能来自那里.为了更清楚,这里是Excel用户表单的快照.底部是列表视图(我隐藏了机密信息),它具有可排序的列,允许用户选择多个非连续的行.

什么是receiverJava中的参数?Java 8语言规范谈论this.
我有java堆内存的一个问题.我在java中开发了一个客户端服务器应用程序,它作为Windows服务运行,需要超过512MB的内存.我有2GB的RAM,但是当我运行我的应用程序时,它会引发异常
内存不足错误:java堆空间
但我已经在java控制面板中设置了堆大小(最大512MB),我仍然得到相同的错误.我无法通过命令行设置堆大小,因为我的应用程序作为Windows服务运行,所以如何增加默认堆大小?
考虑一下volatile int sharedVar.我们知道JLS为我们提供了以下保证:
w其写入值之前i以sharedVar程序顺序happens-before写入动作;i通过w happens-before的成功读取i从sharedVar由读取线程r;i从sharedVar由读线程r happens-before的所有后续行动r的程序顺序.然而,仍有给出没有挂钟时间的保证,当读线程将观察值i.一个完全不会让读取线程看到该值的实现仍然符合此契约.
我已经考虑了一段时间,我看不到任何漏洞,但我认为必须有.请指出我的推理漏洞.
我想发送一个文件到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) 我有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 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或外部库的解决方案不感兴趣.
EnumSet,就像enum它自身一样古老(自Java 5开始),应该是比特场的用例的非妥协替代品:像位域一样快速和精简(好吧,除了不是原始类型),以及类型安全的启动.另一方面,最新和多年来最受期待的Java API-Streams API - 毫不掩饰地使用了bitfields Spliterator的特性.
我是否应该认为上述内容是核心Java专家的明确承认,EnumSet毕竟不是那么好?我是否应该重新考虑从不使用位域的常见最佳实践建议?