小编And*_*niy的帖子

"java.lang.NoSuchFieldError:super"异常 - 编译器中的错误?

用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比它工作正常.这个事实让事情变得更加复杂.

java javac nosuchfieldexception java-9

18
推荐指数
1
解决办法
557
查看次数

获取类实例变量并使用反射打印它们的值

我有一个带有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)

java reflection

17
推荐指数
1
解决办法
5万
查看次数

AmazonS3连接管理

在使用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

谢谢.

spring amazon-s3 amazon-web-services

16
推荐指数
2
解决办法
5491
查看次数

什么是@ sun.misc.Contended注释的价值?

java-8新的注释中@sun.misc.Contended出现.

有几篇写得很好的文章,解释了它的作用以及如何使用它:

但是在任何地方都没有解释,value这个注释是什么?我的意思是,例如在java.lang.Thread它中使用如下:

@sun.misc.Contended("tlr")
int threadLocalRandomProbe;
Run Code Online (Sandbox Code Playgroud)

这个"tlr"价值是多少?它有什么影响?如果这value是默认(空)会发生什么?

java annotations java-8

16
推荐指数
1
解决办法
2482
查看次数

嵌套类的构造函数的问题


这个问题是关于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)

java reflection nested-class

15
推荐指数
2
解决办法
2181
查看次数

使用JAXB创建不可变对象

我正在使用JAXB从XSD文件创建Java对象.我正在创建不可变的包装器来隐藏JAXB生成的对象(之前我正在更新JAXB对象以实现不可变的接口并将接口返回到客户端.但是意识到改变自动生成的类是不好的,因此使用包装器)

目前我将这些不可变的包装器返回给客户端应用程序.是否有任何选项,以便自动生成的类将是不可变的,它将避免创建不可变包装器的额外工作.鼓励采取任何其他方法.

  • 谢谢

java jaxb pojo

14
推荐指数
3
解决办法
6595
查看次数

如何使用Spring MockMvc输出multipart/form-data?

我有方法的控制器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 spring multipartform-data spring-test-mvc mockmvc

14
推荐指数
3
解决办法
7089
查看次数

CompletableFuture.Delayer中的静态ScheduledThreadPoolExecutor

在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

14
推荐指数
1
解决办法
611
查看次数

Hibernate 5.2版 - >很多Query方法都弃用了吗?

我是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()和其他...任何建议我应该如何替换它们?

java sql dao hibernate hql

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

可选Java 8中flatMap的签名

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)

java optional java-8

13
推荐指数
1
解决办法
244
查看次数