我手上有几个有趣的Java集合,例如:
我想知道测试这些API的最佳实践是什么,从性能和可伸缩性的角度来看,即哪一个是最快,最具扩展性,高性能等等.我应该设置数百万个随机元素并使用计时器或其他东西?只是想满足我的好奇心,看看哪一个会赢.
import java.util.*;
public class SimpleArrays
{
@SafeVarargs
public static <T> List<T> asList( T... a )
{
return new ArrayList<>( a );
}
}
Run Code Online (Sandbox Code Playgroud)
asList() 取自Oracles JDK实现的java.util.Arrays.
错误是
error: cannot infer type arguments for ArrayList<>
return new ArrayList<>( a );
1 error
Run Code Online (Sandbox Code Playgroud)
这怎么办?Oracle使用与我们相同的编译器.
我正在使用WatchService应用程序工作台的同步数据文件.当我重命名/移动被监视的目录时,我没有得到任何事件,WatchKey也不会变得无效.我仍然从重命名的目录中获取事件,但据我所知,没有办法找出WatchKey的实际路径WatchKey.watchable(),但仍然会返回原始目录路径.我想避免需要锁定监视目录以防止更改,因为我希望尽可能保持应用程序的轻量级.
我在Windows 7上遇到过JDK 7u10的这个问题
您是否知道此问题的任何解决方法而不锁定目录或查看根目录的所有目录?
UPDATE
在Linux上,我观察到了相同的行为.
到目前为止,我现在有三种选择.
1)依靠用户的纪律,他/她不会移动数据目录.我真的不喜欢这个选项,因为它可能会导致未定义的行为.
2)使用更广泛的非标准本机库
3)在高级目录上创建监视程序的层次结构.这些只接受ENTRY_DELETE事件,因为此事件(或OVERFLOW)必须在实际监视目录被移动或删除时出现,因此无效.
DirectoryStream的文档明确指出:
迭代器非常一致.它是线程安全的,但在迭代时不会冻结目录,因此它可能(或可能不)反映在创建DirectoryStream之后发生的目录的更新.
在我的机器上,我在调试模式下对目录执行了一个简单的迭代.在迭代完成之前,我打破了执行,将文件添加到正在迭代的目录并重新开始.迭代没有看到额外的文件.
我的问题:在什么情况下会迭代反映更新的目录内容?不幸的是,正式文件对此非常模糊.至少可以说.
我想获得有关此代码的Java7此功能的详细信息
public String getPostcode(Person person)
{
if (person != null)
{
Address address = person.getAddress();
if (address != null)
{
return address.getPostcode();
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
可以做这样的事情
public String getPostcode(Person person)
{
return person?.getAddress()?.getPostcode();
}
Run Code Online (Sandbox Code Playgroud)
但坦率地说,对我来说不太清楚.请解释一下?
我用泛型类型写了一个简单的程序.但是,这个简单的示例在不同的JDK版本上表现不同.
简单的代码如下:
import java.util.List;
public class GenericTypes {
public static String method(List<String> list) {
System.out.println("Method method(List<String> list) is invoked.");
return "";
}
public static int method(List<Integer> list) {
System.out.println("Method method(List<Integer> list) is invoked.");
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
场景#1 ==>在JDK 1.7上,出现编译错误

`Method method(List<String>) has the same erasure method(List<E>) as another method in type GenericTypes.`
Run Code Online (Sandbox Code Playgroud)
方案#2 ==>在JDK 1.6或1.5上,没有编译错误.
控制台中代码和输出的屏幕截图如下:

众所周知,自JDK 1.5以来就引入了Generic Type.但是,通过上面的简单示例,它在不同的JDK版本中表现不同.
这是我的问题:
Q1 ==> 在更高的JDK版本(如JDK 1.7)中,在某些情况下,如上述简单示例,使通用类型行为有所不同?
Q2 ==> 上面的例子中编译错误是否比没有编译错误好?
这个你能帮我吗.非常感谢你提前.
当我尝试通过Android Studio导入我的项目时,我收到此错误.
我在项目中使用了gmaps.我该如何解决这个错误?
我已经重新安装了Java并重置了JAVA_HOME.我也确保Gradle设置正确.
2013-12-23 11:13:35,448 [ 107774] WARN - nal.AbstractExternalSystemTask - Cause: java.util.ArrayList cannot be cast to java.util.Map
com.intellij.openapi.externalSystem.model.ExternalSystemException: Cause: java.util.ArrayList cannot be cast to java.util.Map
at org.jetbrains.plugins.gradle.service.project.GradleExecutionHelper.execute(GradleExecutionHelper.java:160)
at com.android.tools.idea.gradle.project.AndroidGradleProjectResolver.resolveProjectInfo(AndroidGradleProjectResolver.java:135)
at com.android.tools.idea.gradle.project.AndroidGradleProjectResolver.resolveProjectInfo(AndroidGradleProjectResolver.java:77)
at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:83)
at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:42)
at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl$1.produce(RemoteExternalSystemProjectResolverImpl.java:41)
at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl$1.produce(RemoteExternalSystemProjectResolverImpl.java:37)
at com.intellij.openapi.externalSystem.service.remote.AbstractRemoteExternalSystemService.execute(AbstractRemoteExternalSystemService.java:59)
at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl.resolveProjectInfo(RemoteExternalSystemProjectResolverImpl.java:37)
at com.intellij.openapi.externalSystem.service.remote.wrapper.ExternalSystemProjectResolverWrapper.resolveProjectInfo(ExternalSystemProjectResolverWrapper.java:49)
at com.intellij.openapi.externalSystem.service.internal.ExternalSystemResolveProjectTask.doExecute(ExternalSystemResolveProjectTask.java:53)
at com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:130)
at com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:120)
at com.intellij.openapi.externalSystem.util.ExternalSystemUtil$3.execute(ExternalSystemUtil.java:422)
at com.intellij.openapi.externalSystem.util.ExternalSystemUtil$4$1.run(ExternalSystemUtil.java:475)
at com.intellij.openapi.progress.impl.ProgressManagerImpl$TaskRunnable.run(ProgressManagerImpl.java:464)
at com.intellij.openapi.progress.impl.ProgressManagerImpl$6.run(ProgressManagerImpl.java:274)
at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178)
at com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171)
at com.intellij.openapi.application.impl.ApplicationImpl$10$1.run(ApplicationImpl.java:657)
at com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:435)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at …Run Code Online (Sandbox Code Playgroud) 我需要能够在握手期间中止websocket连接,以防HTTP请求不符合某些条件.根据我的理解,正确的地方是我自己实现的ServerEndpointConfig.Configurator.modifyHandshake()方法Configurator.我只是无法弄清楚要做什么来中止连接.有一个HandshakeResponse参数,允许向响应添加标题但我找不到任何执行该工作的标题.
那么如何在握手期间中止websocket连接呢?这甚至可能吗?
[注:自答问题]
我FileSystem用java.nio 打开了一个zip文件.我Path从那个文件系统得到了一个:
final Path zipPath = zipfs.getPath("path/into/zip");
Run Code Online (Sandbox Code Playgroud)
现在我在本地文件系统上有一个目录,我用它来获取:
final Path localDir = Paths.get("/local/dir")
Run Code Online (Sandbox Code Playgroud)
我想测试是否/local/dir/path/into/zip存在,所以我使用以下方法检查它的存在:
Files.exists(localDir.resolve(zipPath))
Run Code Online (Sandbox Code Playgroud)
但我得到了ProviderMismatchException.为什么?我该如何解决?
我非常喜欢Java 7+写作hashCode()方式:
@Override
public int hashCode() {
Objects.hash(field1, field2);
}
Run Code Online (Sandbox Code Playgroud)
但它无法正常使用数组.以下代码:
@Override
public int hashCode() {
Objects.hash(field1, field2, array1, array2);
}
Run Code Online (Sandbox Code Playgroud)
将不会工作,因为array1和array2常规hashCode()而不是Arrays.hashCode()被调用.
如何Objects.hash()以正确的方式使用数组?