我是DRY和KISS原则的追随者,但上周我有一个案例,两者似乎互相矛盾:
对于我正在做的应用程序,我必须实现一个循环,执行以下操作:
这是一个例子:
for (A a : listOfA) {
listOfB.add(BFactory.convertFromAToB(a));
}
Run Code Online (Sandbox Code Playgroud)
在代码中,我必须做大约4次,将类型(例如D,E等)转换为另一种类型.我可能无法更改我要转换的类型,因为它们是我们必须在app中使用的第三方类型.
所以我们有:
for (A a : listOfA) {
listOfB.add(BFactory.convertFromAToB(a));
}
for (C a : listOfC) {
listOfB.add(DFactory.convertFromCToD(c));
}
...
Run Code Online (Sandbox Code Playgroud)
所以,为了不违反干,我提出了一个通用的解决方案:
private interface Function<S, T> {
T apply(S s);
}
public <S, T> void convertAndCopy(List<S> src, List<T> dst, Function<S, T> f) {
for (S s : src) {
dst.add(f.apply(s));
}
}
Run Code Online (Sandbox Code Playgroud)
电话看起来像这样:
convertAndCopy(listOfA, listOfB, new Function<A, B>() {
A apply(B b) {
return CFactory.convertFromBToC(b); …Run Code Online (Sandbox Code Playgroud) 昨天我试着开始使用Java RMI.我找到了这个sun教程(http://java.sun.com/docs/books/tutorial/rmi/index.html)并开始使用服务器实现.但每次我开始计划(rmiregistry正在运行)我得到一个带有以下StackTrace的AccessControlException:
LoginImpl exception:
java.security.AccessControlException: access denied (java.io.FilePermission \\\C\ProjX\server\serverProj\bin\usermanager read)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
at java.security.AccessController.checkPermission(AccessController.java:427)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkRead(SecurityManager.java:871)
at java.io.File.exists(File.java:700)
at sun.net.www.protocol.file.Handler.openConnection(Handler.java:80)
at sun.net.www.protocol.file.Handler.openConnection(Handler.java:55)
at java.net.URL.openConnection(URL.java:943)
at sun.rmi.server.LoaderHandler.addPermissionsForURLs(LoaderHandler.java:1020)
at sun.rmi.server.LoaderHandler.access$300(LoaderHandler.java:52)
at sun.rmi.server.LoaderHandler$Loader.<init>(LoaderHandler.java:1108)
at sun.rmi.server.LoaderHandler$Loader.<init>(LoaderHandler.java:1089)
at sun.rmi.server.LoaderHandler$1.run(LoaderHandler.java:861)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.server.LoaderHandler.lookupLoader(LoaderHandler.java:858)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:541)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1494)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1457)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at …Run Code Online (Sandbox Code Playgroud) 持久化Java对象有哪些轻量级选项?
我正在寻找最简单的解决方案.我不希望任何花哨的特征只是简单的东西,与合理简单的对象(一些集合,关系和简单的继承)一起工作,并且不会给现有的代码库带来太多明显的复杂性(如果有的话).
我所知道的选项包括Hibernate和EMF这样的框架,但它们听起来(并且经验丰富)过于复杂和耗时.我喜欢开箱即用的东西,最好是文件导向而不是面向dababase,我可以把它放在我普通的旧Java对象之上.
这是一个新手问题,提前感谢任何类似教程的上下文澄清指南.
我想获取列表中的下一个元素,如果列表结束,我想要第一个元素.所以我只想用它来换句话说.
List<int> agents = taskdal.GetOfficeAgents(Branches.aarhusBranch);
if (lastAgentIDAarhus != -1)
{
int index = agents.IndexOf(lastAgentIDAarhus);
if (agents.Count > index + 1)
{
lastAgentIDAarhus = agents[index + 1];
}
else
{
lastAgentIDAarhus = agents[0];
}
}
else
{
lastAgentIDAarhus = agents[0];
}
Run Code Online (Sandbox Code Playgroud)
我对上面显示的自己的解决方案感到非常不满,请告诉我你是否有更好的解决方案:)
我在position: fixed页面底部的工具栏中使用jQuery UI的datepicker控件.有时,在随机计算机上,日期选择器会出现在工具栏下方,这意味着它不在页面中,无法查看或与之交互.
有没有办法强制将datepicker控件的位置始终位于其上方和右侧<input>?
这可以是一些示例C代码或一个实用程序,它将向我显示gui或在控制台上它并不重要,但我必须能够"命令"它在准确的时间抓取坐标xev不是很有用(我可以搞清楚).
我正在测试我创建的WCF Web服务的早期版本.在客户端,当我使用VS来"添加服务引用"时,一切正常.
但是当我尝试使用该服务时,我得到错误,
Run Code Online (Sandbox Code Playgroud)Could not establish trust relationship for the SSL/TLS secure channel with authority **
星号代表服务器的IP地址.
无论如何在服务器上有一个安全证书,但它只是为了测试自己生成的,所以我暂时不担心证书错误.
在客户端,已经为我生成了app.config,
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="BindingName" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Transport">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="***************"
binding="wsHttpBinding" bindingConfiguration="BindingName"
contract="***************" name="BindingName">
<identity>
<servicePrincipalName value="***************" /> …Run Code Online (Sandbox Code Playgroud) 什么是将bool转换为字节的最快方法?
我想要这个映射:False = 0,True = 1
注意:我不想使用任何if语句或其他条件语句.我不希望CPU停止或猜测下一个语句.
更新: 对于那些想要看到这个问题的人.此示例显示如何从代码中减少两个if语句.
byte A = k > 9 ; //If it was possible (k>9) == 0 || 1
c[i * 2] = A * (k + 0x37) - (A - 1) * (k + 0x30);
Run Code Online (Sandbox Code Playgroud) 我们正在开发一个数据库工具,我们希望以一种可扩展且易于导入数据库表的格式编写日志文件.我们都觉得使用SQL过滤这些信息是一个好主意,因为日志将是一个长文件,"搜索"可能不够好.你能给我一些建议吗?任何经验也都有用!提前致谢.
第一次在这里问一个问题.通常我可以在不必询问的情况下找到答案,但这次我被困住了,无法弄清楚我错过了什么.
我只是想让我的Android应用在网站上填写表格并提交.我不需要应用程序对发回的任何数据执行任何操作,只需填写表单并提交即可.基本上我正在尝试收集投票应用的结果.我认为表单提交很简单所以我创建了一个Google电子表格并从中制作了一个表单.我想我会将Android应用程序指向表单,然后我会在电子表格中包含所有数据供以后查看.我不能让Android应用程序实际填写表格.这是资源.
private void submitVote(String outcome) {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("https://spreadsheets.google.com/spreadsheet/formResponse?hl=en_US&formkey=dDlwZzh4bGFvNFBxUmRsR0d2VTVhYnc6MQ&ifq");
List<BasicNameValuePair> results = new ArrayList<BasicNameValuePair>();
results.add(new BasicNameValuePair("entry.0.single", cardOneURL));
results.add(new BasicNameValuePair("entry.1.single", outcome));
results.add(new BasicNameValuePair("entry.2.single", cardTwoURL));
try {
post.setEntity(new UrlEncodedFormEntity(results));
} catch (UnsupportedEncodingException e) {
// Auto-generated catch block
Log.e("YOUR_TAG", "An error has occurred", e);
}
try {
client.execute(post);
} catch (ClientProtocolException e) {
// Auto-generated catch block
Log.e("YOUR_TAG", "An error has occurred", e);
} catch (IOException e) {
// Auto-generated catch block …Run Code Online (Sandbox Code Playgroud)