小编kaq*_*qao的帖子

为什么Java声称在涉及有界泛型时有2个声明的方法?

具有以下定义:

public interface BaseService<T, ID> {

    T findOne(ID id);

}

public class BaseServiceImpl<T,ID extends Serializable> implements BaseService<T, ID> {

    @Override
    public T findOne(ID id) {
        return null;
    }

}
Run Code Online (Sandbox Code Playgroud)

为什么BaseServiceImpl.class.getDeclaredMethods()返回2种方法:

  • public java.lang.Object BaseServiceImpl.findOne(java.io.Serializable)
  • public java.lang.Object BaseServiceImpl.findOne(java.lang.Object)

有没有办法过滤掉这些?

java generics reflection java-bridge-method

7
推荐指数
1
解决办法
120
查看次数

关闭应用后,推送未收到

在将其标记为重复之前:

我已经阅读了至少15个类似的线程,每个线程都使用旧的Parse代码(现已弃用的setDefaultPushCallback),或者问题是在一个活动中调用Parse.initialize(...)而不是在应用类.但是,这并不适用于我的情况.官方的例子(我正在使用)显然是正确的,因此代码已经在Application类中.

我已经从Parse的官方指南中下载了Push Starter示例,并在模拟器上进行了尝试.我只在应用程序运行时收到推送.它关闭的那一刻(从"最近的应用程序"列表中删除,而不是强行杀死),我不再受到推动.这使整个功能相当无用......我尝试使用和不使用GCM,行为是一样的.

有什么可能是错的线索?所有类都是库存示例,没有被我覆盖或添加(除了id/key和我从指南中复制的ParsePush.subscribeInBackground调用).奇怪的是,示例代码不包含ParsePush.subscribeInBackground,而QuickStart没有提到它.它甚至提供了一个Test按钮,该按钮可以发送一个我从未收到过的推送,无论是否有subscribeInBackground.到目前为止,我能够获得推送的唯一方法是使用subscribeInBackground并通过Web控制台手动发送推送,并且只有在应用程序运行时才这样做.Web控制台还告诉我们有2个已注册的设备......这是不真实的.

表现:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.parse.starter"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="21"/>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

    <!--
      IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below
      to match your app's package name + ".permission.C2D_MESSAGE".
    -->
    <permission android:protectionLevel="signature"
        android:name="com.parse.starter.permission.C2D_MESSAGE" />
    <uses-permission android:name="com.parse.starter.permission.C2D_MESSAGE" />

    <application
        android:name=".ParseApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:allowBackup="true">
        <activity
            android:name=".ParseStarterProjectActivity"
            android:label="@string/app_name" > …
Run Code Online (Sandbox Code Playgroud)

java android push-notification parse-platform

6
推荐指数
1
解决办法
1143
查看次数

如何设置Hibernate Gradle插件以增强字节码?

Hibernate Gradle插件相当于hibernate-enhance-maven-plugin并提供了构建时代码增强功能.在官方的文档不提apply plugin: 'something'线.如果我按照指南说的那样做,我得到:

无法为参数找到方法hibernate()...

我试着猜测插件名称apply plugin: 'enhance'(正如这个线程建议的那样)和apply plugin: 'org.hibernate.orm'(正如这个测试建议的那样),但它只是说带有该id的插件是未知的.

有没有人设法成功设置此插件?

我的build.gradle如下:

allprojects {
    group 'xxx'
    version '1.0-SNAPSHOT'
}

subprojects {
    apply plugin: 'java'

    sourceCompatibility = 1.8

    repositories {
        mavenLocal()
        mavenCentral()
    }

    dependencies {
        ...
    }
}

project(':xxx-model') {
    buildscript {
       repositories {
           mavenLocal()
           mavenCentral()
       }
       dependencies {
           classpath "org.hibernate:hibernate-gradle-plugin:5.0.7.Final"
       }
    }

    apply plugin: 'org.hibernate.orm'

    hibernate {
        enhance {}
    }
}

... more unrelated project blocks …
Run Code Online (Sandbox Code Playgroud)

hibernate gradle

6
推荐指数
2
解决办法
3446
查看次数

如何使用ExecutorService进行轮询直到结果到达

我有一种情况,我必须轮询远程服务器以检查任务是否已完成。完成后,我将进行另一个调用以检索结果。

我最初认为我应该使用SingleThreadScheduledExecutorwith scheduleWithFixedDelay进行轮询:

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
ScheduledFuture future = executor.scheduleWithFixedDelay(() -> poll(jobId), 0, 10, TimeUnit.SECONDS);

public void poll(String jobId) {
   boolean jobDone = remoteServer.isJobDone(jobId);
   if (jobDone) {
       retrieveJobResult(jobId);
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,因为我只能提供RunnablescheduleWithFixedDelay不能返回任何东西,我不明白时,future就完成了,如果有的话。打电话future.get()甚至意味着什么?我在等什么结果?

第一次检测到远程任务完成时,我想执行一个不同的远程调用并将其结果设置为的值future。我认为我可以为此使用CompletableFuture,以便将其转发给我的poll方法,然后将其转发给retrieveTask最终将完成它的方法:

CompletableFuture<Object> result = new CompletableFuture<Object>();
ScheduledFuture future = executor.scheduleWithFixedDelay(() -> poll(jobId, result), 0, 10, TimeUnit.SECONDS);

public void poll(String jobId, CompletableFuture<Object> result) {
   boolean jobDone = remoteServer.isJobDone(jobId);
   if (jobDone) {
       retrieveJobResult(jobId, …
Run Code Online (Sandbox Code Playgroud)

java concurrency future executorservice completable-future

6
推荐指数
1
解决办法
3425
查看次数

如果使用thenApply,则CompletableFuture#whenComplete未被调用

我有以下代码(由我之前的问题得出),它在远程服务器上安排任务,然后使用轮询完成ScheduledExecutorService#scheduleAtFixedRate.任务完成后,会下载结果.我想将a返回Future给调用者,以便他们可以决定阻止的时间和时间,并为他们提供取消任务的选项.

我的问题是,如果客户端取消方法Future返回的download,whenComplete则不执行块.如果我删除thenApply它.很明显,我对Future构图有些误解......我应该改变什么?

public Future<Object> download(Something something) {
    String jobId = schedule(something);
    CompletableFuture<String> job = pollForCompletion(jobId);
    return job.thenApply(this::downloadResult);
}

private CompletableFuture<String> pollForCompletion(String jobId) {
    ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
    CompletableFuture<String> completionFuture = new CompletableFuture<>();

    ScheduledFuture<?> checkFuture = executor.scheduleAtFixedRate(() -> {           
            if (pollRemoteServer(jobId).equals("COMPLETE")) {
                completionFuture.complete(jobId);
            }
    }, 0, 10, TimeUnit.SECONDS);
    completionFuture                
            .whenComplete((result, thrown) -> {
                System.out.println("XXXXXXXXXXX"); //Never happens unless thenApply is removed
                checkFuture.cancel(true);
                executor.shutdown();
            });
    return completionFuture; …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading java-8 completable-future

6
推荐指数
1
解决办法
2848
查看次数

ValidationError FieldUndefined SPQR GraphQL

我得到以下内容,似乎无法找到答案.

Error [ValidationError{validationErrorType=FieldUndefined, queryPath=[find_by_id], message=Validation error of type FieldUndefined: Field 'find_by_id' in type 'Query' is undefined @ 'find_by_id', locations=[SourceLocation{line=1, column=2}], description='Field 'find_by_id' in type 'Query' is undefined'}]
Run Code Online (Sandbox Code Playgroud)

我的守则.

询问

@GraphQLQuery(name = "find_by_id")
public Event findById(@GraphQLArgument(name = "id") Long id) {
Run Code Online (Sandbox Code Playgroud)

架构

@EJB
private EventFacade eventFacade; // Normal stateless bean 

GraphQLSchema guestSchema = new GraphQLSchemaGenerator()
            .withOperationsFromSingleton(eventFacade)
            .withValueMapperFactory(new JacksonValueMapperFactory())
            .withDefaults()
            .generate();

GraphQL graphQL = GraphQL.newGraphQL(guestSchema).build();
Run Code Online (Sandbox Code Playgroud)

要执行的代码

String query = "{find_by_id (id: 1){eventName}}";
ExecutionResult result = graphQL.execute(query);
Run Code Online (Sandbox Code Playgroud)

使用SPQR lib

事件POJO是基本的,eventName为String,抽象(Parent)类为id.实体类位于不同的jar(Entity Jar)中.执行查询和构建模式的代码位于EJB Jar中. …

java graphql graphql-java graphql-spqr

6
推荐指数
1
解决办法
1139
查看次数

WebSphere Liberty Core 抛出 java.io.IOException: Stream is closed

使用 WebSphere Liberty Core (WLC: 8.5.5.1 (wlp-1.0.3.20130510-0831)) 时,我在日志中随机看到以下错误。在其他应用程序服务器上,这不会发生。我不知道这在代码中的什么地方发生...看起来 Spring 3.1.3 几乎正在尝试做一些乱序的事情。有没有人解决过这个问题?

[03/06/14 20:04:33:232 BST] 000000cb com.ibm.ws.webcontainer.util.ApplicationErrorUtils E SRVE0777E:应用程序类“com.ibm.wsspi.http.HttpOutputStream.validate:187”抛出异常java.io.IOException:流在 com.ibm.wsspi.http.HttpOutputStream.validate(HttpOutputStream.java:187) at com.ibm.wsspi.http.HttpOutputStream.flush(HttpOutputStream.java:555) 处关闭。 ibm.ws.webcontainer.osgi.response.WCOutputStream.flush(WCOutputStream.java:213) 在 org.springframework.security.web.context.SaveContextOnUpdateOrErrorResponseWrapper$SaveContextServletOutputStream.flush(SaveContextOnUpdateOrErrorResponseWrapper.java:354) 在 org.springframework.http Converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:180) 在 org.springframework.web.servlet.mvc.method。annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:137) at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.orgmeth.java:80.springframework) at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters. annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:94) at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:69) at org.springframework.web.servlet.mvc.methodServletInvocable.annotation invokeAndHandle(ServletInvocableHandlerMethod.java:118) 在 org.springframework.web.servlet.mvc.method.annotation。RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:604) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:565) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter。 handle(AbstractHandlerMethodAdapter.java:80) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) at org.springframework .web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:575) ) 在 javax.servlet.http.HttpServlet。service(HttpServlet.java:668) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1240) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:760)在 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443) 在 com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:127) 在 com.ibm.ws.webcontainer .filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:88) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) ) 在 com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194) 在 com.ibm.ws.webcontainer.filter。WebAppFilterChain.doFilter(WebAppFilterChain.java:85) …

java websphere-liberty

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

如何确定用于GraphQL突变的根值

我正在尝试使用GraphQL,需要帮助了解如何知道在即将执行突变时要提供的根值.

具体示例:您要更新当前登录用户的用户名.突变看起来像这样:

 mutation TestMutation {
       updateMyUsername(newName: "CoolName") {
                       username }
}
Run Code Online (Sandbox Code Playgroud)

这里提供的根对象是当前用户.但是当你收到变异而没有解析它并看到它的名字时,你怎么知道这个?基于URL无法做出决定,因为只存在一个端点.解析字符串只是为了将它再发送到将被解析的地方听起来最好浪费.

通常的做法是在URL或请求体中提供一些额外的参数来为应用程序提供更多的上下文吗?

graphql

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

类型参数上的注释可以在运行时访问吗?

Java 8 允许执行以下操作:

public List<@NonNull String> names;
Run Code Online (Sandbox Code Playgroud)

但是有没有办法在运行时访问此注释,或者它仅适用于编译器插件?

有一个新Method#getAnnotatedReturnType功能可以访问返回类型上的注释,所以我希望ParameterizedType现在有类似的东西getActualAnnotatedTypeArguments可以对泛型类型参数执行相同的操作,但它不存在......

java annotations bean-validation java-8

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

如何在泛型边界上获取TYPE_USE注释

我有这个案子:

public class SomeClass<T> {
    public <@A1 S extends @A2 T> @A3 S myMethod() { ...}
}
Run Code Online (Sandbox Code Playgroud)

而我正试图@A2在界限上得到注释T.
这就是我所看到的,假设myMethodSomeClass.class.getDeclaredMethod("myMethod").为了便于阅读,删除了类型转换.

  • myMethod.getGenericReturnType().getAnnotations()返回@A1(正如预期的那样,我猜)
  • myMethod.getGenericReturnType().getBounds()[0].getAnnotations()没有回报(??不是@A2吗?)
  • myMethod.getAnnotatedReturnType().getAnnotations()返回@A3(正如预期的那样,我猜)
  • myMethod.getAnnotatedReturnType().getAnnotatedBounds()[0].getAnnotations()什么都不返回(我猜是例外)

它似乎@A2迷路了......这听起来不合理.我做错了什么或这确实是一些奇怪的行为?

更新:这确实是一个JDK错误,我报告并且它被接受为JDK-8191466

java generics reflection annotations java-8

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