用Java编写的-9是运行下面的代码给了我一个非常奇怪和有趣的异常运行时:
Exception in thread "main" java.lang.NoSuchFieldError: super
at A$C.test(A.java:15)
at A.main(A.java:5)
Run Code Online (Sandbox Code Playgroud)
代码:
public class A {
public static void main(String[] args) {
new C().test();
}
interface B {
private void test() {
}
}
static class C implements B {
void test() {
B.super.test();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道:它是这样设计的,还是理想情况下这个代码不应该被编译,因此这是一个编译器错误?(我个人认为这是一个错误).
UPD:提交了一个错误,ID:9052188
UPD-2:它看起来B.super.test()通常是一个有效的结构,因为如果test()方法default比它工作正常.这个事实让事情变得更加复杂.
我有一个带有getter和setter的2个POJO类,现在我正在尝试获取该类的所有类实例变量.
我知道我们可以用反射怎么做?
这是我的POJO类,它将扩展我的反射类.
class Details{
private int age;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
反思类是这样的:
class Reflection{
public String toString(){
return all the fields of that class
}
Run Code Online (Sandbox Code Playgroud) 在使用AWS时,是否有推荐的方法来管理与AmazonS3的连接?
典型的Amazon S3代码(取自亚马逊官方样本)通常看起来像这样?
AmazonS3 s3 = new AmazonS3Client(...);
...
s3.putObject(new PutObjectRequest(bucketName, project.getName() + "/" + imageFile.getName(), imageFile));
Run Code Online (Sandbox Code Playgroud)
以下是问题:
这是一个好主意维护代码中每个人使用的单个AmazonS3Client,还是最好在每次调用时创建一个?
例如,在使用MySQL时是否存在连接池的概念?
像断开连接(MySQL类比:MySQL重启)这样的问题是否相关,以致AmazonS3Client变得无效并需要重新创建?如果是这样,处理断开连接的正确方法是什么?
有谁知道spring与spring集成提供的功能:https://github.com/spring-projects/spring-integration-extensions/tree/master/spring-integration-aws
谢谢.
在java-8新的注释中@sun.misc.Contended出现.
有几篇写得很好的文章,解释了它的作用以及如何使用它:
但是在任何地方都没有解释,value这个注释是什么?我的意思是,例如在java.lang.Thread它中使用如下:
@sun.misc.Contended("tlr")
int threadLocalRandomProbe;
Run Code Online (Sandbox Code Playgroud)
这个"tlr"价值是多少?它有什么影响?如果这value是默认(空)会发生什么?
这个问题是关于Java的有趣行为:它在某些情况下为嵌套类生成了额外的(非默认的)构造函数.
这个问题也是关于奇怪的匿名类,Java用这个奇怪的构造函数生成.
请考虑以下代码:
package a;
import java.lang.reflect.Constructor;
public class TestNested {
class A {
A() {
}
A(int a) {
}
}
public static void main(String[] args) {
Class<A> aClass = A.class;
for (Constructor c : aClass.getDeclaredConstructors()) {
System.out.println(c);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将打印:
a.TestNested$A(a.TestNested)
a.TestNested$A(a.TestNested,int)
Run Code Online (Sandbox Code Playgroud)
好.接下来,让构造函数A(int a)私有:
private A(int a) {
}
Run Code Online (Sandbox Code Playgroud)
再次运行程序.接收:
a.TestNested$A(a.TestNested)
private a.TestNested$A(a.TestNested,int)
Run Code Online (Sandbox Code Playgroud)
这也没关系.但是现在,让我们main()以这种方式修改方法(添加类A创建的新实例):
public static void main(String[] args) {
Class<A> aClass = A.class;
for (Constructor c : aClass.getDeclaredConstructors()) {
System.out.println(c); …Run Code Online (Sandbox Code Playgroud) 我正在使用JAXB从XSD文件创建Java对象.我正在创建不可变的包装器来隐藏JAXB生成的对象(之前我正在更新JAXB对象以实现不可变的接口并将接口返回到客户端.但是意识到改变自动生成的类是不好的,因此使用包装器)
目前我将这些不可变的包装器返回给客户端应用程序.是否有任何选项,以便自动生成的类将是不可变的,它将避免创建不可变包装器的额外工作.鼓励采取任何其他方法.
我有方法的控制器PUT方法,它接收multipart/form-data:
@RequestMapping(value = "/putIn", method = RequestMethod.PUT)
public Foo updateFoo(HttpServletRequest request,
@RequestBody Foo foo,
@RequestParam("foo_icon") MultipartFile file) {
...
}
Run Code Online (Sandbox Code Playgroud)
我想用它来测试它MockMvc.不幸的是,MockMvcRequestBuilders.fileUpload基本上创建了MockMultipartHttpServletRequestBuilder一个POST方法:
super(HttpMethod.POST, urlTemplate, urlVariables)
Run Code Online (Sandbox Code Playgroud)
编辑:
我一定能 ,我不能创建自己的实现MockHttpServletRequestBuilder,比如
public MockPutMultipartHttpServletRequestBuilder(String urlTemplate, Object... urlVariables) {
super(HttpMethod.PUT, urlTemplate, urlVariables);
super.contentType(MediaType.MULTIPART_FORM_DATA);
}
Run Code Online (Sandbox Code Playgroud)
因为MockHttpServletRequestBuilder有包本地构造函数.
但我想知道是否更方便有任何方法可以做到这一点,可能是我错过了一些现有的课程或方法吗?
在java-9 中,引入了类中的新方法completeOnTimeoutCompletableFuture:
public CompletableFuture<T> completeOnTimeout(T value, long timeout,
TimeUnit unit) {
if (unit == null)
throw new NullPointerException();
if (result == null)
whenComplete(new Canceller(Delayer.delay(
new DelayedCompleter<T>(this, value),
timeout, unit)));
return this;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它在其实现中使用静态 ScheduledThreadPoolExecutor:
static ScheduledFuture<?> delay(Runnable command, long delay,
TimeUnit unit) {
return delayer.schedule(command, delay, unit);
}
Run Code Online (Sandbox Code Playgroud)
哪里
static final ScheduledThreadPoolExecutor delayer;
static {
(delayer = new ScheduledThreadPoolExecutor(
1, new DaemonThreadFactory())).
setRemoveOnCancelPolicy(true);
}
Run Code Online (Sandbox Code Playgroud)
对我来说这是一种非常奇怪的方法,因为它可能成为整个应用程序的瓶颈:唯一一个ScheduledThreadPoolExecutor只有一个线程保留在池中以执行所有可能的CompletableFuture任务?
我在这里错过了什么?
PS它看起来像:
1)这段代码的作者不愿意提取这种逻辑,而是倾向于重用ScheduledThreadPoolExecutor …
java multithreading threadpoolexecutor java-9 completable-future
我是Hibernate的新手.
我正在尝试获取所有管理员的名字和姓氏列表.
我的以下代码中有两个警告.我已经尝试在线搜索了很多.
1)查询是原始类型.应该参数化对泛型类型Query的引用.
2)不推荐使用Query类型的方法list().
public List<Object> loadAllAdmins() {
List<Object> allAdmins = new ArrayList<Object>();
try {
HibernateUtil.beginTransaction();
Query q = currentSession.createQuery("SELECT admin.firstName, admin.lastName from AdminBean admin");
allAdmins= q.list();
HibernateUtil.commitTransaction();
} catch (HibernateException ex) {
System.out.println("List<AdminBean> loadAllPersons: HibernateException");
}
return allAdmins;
}
Run Code Online (Sandbox Code Playgroud)
但我在整个网络上都看到了这样的示例代码.我该如何解决这两个问题?
更新
我只是尝试按照建议使用Criteria.它还说,对于Criteria,list()方法是弃用的......看起来很多方法都被弃用了Query和Criteria,包括uniqueResult()和其他...任何建议我应该如何替换它们?
在oracle文档中,它似乎是
<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
Run Code Online (Sandbox Code Playgroud)
对于mappera Function,它使参数反变,但不使返回类型协变.我想知道是否mapper可以(应该)
Function<? super T,Optional<? extends U>>
Run Code Online (Sandbox Code Playgroud)
要么
Function<? super T, ? extends Optional<? extends U>>
Run Code Online (Sandbox Code Playgroud)
?