简体   繁体   English

在这种情况下如何在Java泛型中使用多个界限

[英]How to use multiple bounds in java generics in this case

I am trying to create a constructor for something like this. 我试图为这样的事情创建一个构造函数。

public <T extends AppCompatActivity & DialogInterface.OnDismissListener> GooglePlayUtils(T activity) {
    this.activity = activity;
}

Android studio doesn't give any complains about this, but build fails on CompileDebugJava Android Studio对此没有任何抱怨,但是在CompileDebugJava上构建失败

However if remove the second bound, compilation works fine. 但是,如果删除第二个边界,则编译效果很好。 Am I doing it wrong or is there some other factor involved that I am missing? 我做错了吗?还是我缺少其他因素?

Edit After adding the type parameter to class itself rather than constructor solved the issue for me. 编辑将类型参数添加到类本身而不是构造函数后,为我解决了这个问题。 But am still keeping the question open so someone can give the explanation why so? 但是,仍然要开放问题,以便有人可以解释为什么吗?

Edit 2 Added the type parameter to class instead of constructor 编辑2将类型参数添加到类而不是构造函数

public abstract class GooglePlayUtils<T extends AppCompatActivity & DialogInterface.OnDismissListener> {

private T activity;

public GooglePlayUtils(T activity) {
    this.activity = activity;
}

Error 错误

java.lang.AssertionError: at com.sun.tools.javac.util.Assert.error(Assert.java:133) at com.sun.tools.javac.util.Assert.check(Assert.java:86) at com.sun.tools.javac.comp.Attr.attribBounds(Attr.java:561) at com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:723) at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:669) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418) at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:480) at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:3250) at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3173) at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3109) at com.sun.tools.javac.comp.Attr.visitClassDef(Attr.java:708) at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:591) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418) at com.sun.tools.javac.comp.Attr.attribStat(Attr java.lang.AssertionError:在com.sun.tools.javac.util.Assert.error(Assert.java:133)在com.sun.tools.javac.util.Assert.check(Assert.java:86)在com com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:723)上的.sun.tools.javac.comp.Attr.attribBounds(Attr.java:561)在com.sun.tools.javac.tree上.JCTree $ JCMethodDecl.accept(JCTree.java:669)在com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431)在com.sun.tools.javac.comp.Attr.attribTree(Attr com.sun.tools.javac.comp.Attr.attribStat(Attr.java:480)处com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:3250)处的.java:418)。位于com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3109)的com.sun.tools.javac.comp处的sun.tools.javac.comp.Attr.attribClass(Attr.java:3173) com.sun.tools.javac.tree.JCTree $ JCClassDecl.accept(JCTree.java:591)处的Attr.visitClassDef(Attr.java:708)com.sun.tools.javac.comp.Attr.attribTree(Attr。 java:431)com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418)at com.sun.tools.javac.comp.Attr.attribStat(Attr .java:480) at com.sun.tools.javac.comp.Attr.visitNewClass(Attr.java:1790) at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1372) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418) at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:449) at com.sun.tools.javac.comp.Attr.visitAssign(Attr.java:1993) at com.sun.tools.javac.tree.JCTree$JCAssign.accept(JCTree.java:1466) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418) at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:460) at com.sun.tools.javac.comp.Attr.visitExec(Attr.java:1294) at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1167) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418) at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:480) at com.sun.tools.javac.comp.Attr.attribStats(Attr.jav .java:480)at com.sun.tools.javac.comp.Attr.visitNewClass(Attr.java:1790)at com.sun.tools.javac.tree.JCTree $ JCNewClass.accept(JCTree.java:1372)at com.sun.tools.javac上的com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431)com.sun.tools.javac上的com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418)。 com.sun.tools.javac.comp.Attr.visitAssign(Attr.java:1993)处的comp.Attr.attribExpr(Attr.java:449)com.sun.tools.javac.tree.JCTree $ JCAssign.accept( com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431)的com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418)的JCTree.java:1466) com.sun.tools.javac.comp.Attr.visitExec(Attr.java:1294)处的.sun.tools.javac.comp.Attr.attribExpr(Attr.java:460)在com.sun.tools.javac.tree处.JCTree $ JCExpressionStatement.accept(JCTree.java:1167)在com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431)在com.sun.tools.javac.comp.Attr.attribTree(Attr .java:418)at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:480)at com.sun.tools.javac.comp.Attr.attribStats(Attr.jav a:496) at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:918) at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:781) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418) at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:480) at com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:836) at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:669) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418) at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:480) at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:3250) at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3173) at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3109) at com.sun.tools.javac.comp.Attr.attrib(Attr.java:3083) at com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1184) at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompil a:496)at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:918)at com.sun.tools.javac.tree.JCTree $ JCBlock.accept(JCTree.java:781)at com。 com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418)处的com.sun.tools.javac.comp处的.sun.tools.javac.comp.Attr.attribTree(Attr.java:431) .com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:836)的.Attr.attribStat(Attr.java:480)在com.sun.tools.javac.tree.JCTree $ JCMethodDecl.accept(JCTree com.sun.tools.javac.comp.Attr.attribTree(Attr.java:431)处com.sun.tools.javac.comp.Attr.attribTree(Attr.java:418)处的.java:669)。 com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:3250)上的sun.tools.javac.comp.Attr.attribStat(Attr.java:480)在com.sun.tools.javac.comp上。 com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3109)的com.sun.tools.javac.comp.Attr.attrib(Attr.java:的Attr.attribClass(Attr.java:3173) 3083),com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1184),com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompil er.java:870) at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:829) at com.sun.tools.javac.main.Main.compile(Main.java:439) at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:132) at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:45) at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:33) at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:101) at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:50) at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:36) at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:34) at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:25) at org.gradle.api.tasks.compile.JavaCompile.pe er.java:870)com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:829)com.sun.tools.javac.main.Main.compile(Main.java:439) org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:45)的.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:132)在org.gradle.api.internal org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:101)的.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:33)在org.gradle.api.internal.tasks.compile org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:50)在org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(NormalizingJavaCompiler.java:36) (CleaningJavaCompilerSupport.java:34)在org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:25)在org.gradle.api.tasks.compile.JavaCompile.pe rformCompilation(JavaCompile.java:157) at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:137) at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:91) at sun.reflect.GeneratedMethodAccessor1481.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:243) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:219) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:230) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$Standar org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:137)的rformCompilation(JavaCompile.java:157)org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:91)在org.gradle.internal上的java.lang.reflect.Method.invoke(Method.java:606)上的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)上的sun.reflect.GeneratedMethodAccessor1481.invoke(未知源) org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory $ IncrementalTask​​Action.doExecute(AnnotationProcessingTaskFactory.java:243)的.reflect.JavaMethod.invoke(JavaMethod.java:75)org.gradle.api.internal.project.taskfactory org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory $ StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:219)在org.gradle.api.internal.project.taskfactory处的AnnotationProcessingTaskFactory $ IncrementalTask​​Action.execute(AnnotationProcessingTaskFactory.java:230) .AnnotationProcessingTaskFactory $ STANDAR dTaskAction.execute(AnnotationProcessingTaskFactory.java:208) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.ja org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)处的dTaskAction.execute(AnnotationProcessingTaskFactory.java:208) org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)上的ExecuteActionsTaskExecuter.java:61)org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter。 35)在org.org.grad.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)在org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)在org.org .gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)位于org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.ja va:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:310) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88) at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37) at org.gr va:52)在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)在org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceOnceTaskExecuter.java:43)在org.gradle.execution.taskgraph.Abs​​tractTaskPlanExecutor $ TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)的org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:310)处org.gradle.execution.taskgraph.Abs​​tractTaskPlanExecutor $ TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)处的$ TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23:23) )在org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)在org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)在org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88) adle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62) at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68) at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149) at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106) at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86) at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:90) at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.j org.gradle.execution.DefaultBuildExecuter.access $ 200(DefaultBuildExecuter.java:23)处的dle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62),org.gradle.execution.DefaultBuildExecuter $ 2.proceed(DefaultBuildExecuter.java:68)在org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)在org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)在org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55) )org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java: 86)在org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.j)上的org.gradle.launcher.exec.InProcessBuildActionExecuter $ DefaultBuildController.run(InProcessBuildActionExecuter.java:90) ava:54) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28) at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:49) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.ja ava:54)位于org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)位于org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41)位于org.gradle.launcher.exec org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:49)上的.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)在org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute上(BuildCommandOnly.java:36)在org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)在org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java :37),位于org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26),位于org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.ja va:120) at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72) at org.gradle.util.Swapper.swap(Swapper.java:38) at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66) at org.gradle.launcher.daemon.server va:120)在org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)上的org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)在org.org.gradle.launcher.daemon.server.exec.ForwardClientInput $ 2.call(ForwardClientInput.java:74)在org.org.gradle.launcher.daemon.server.exec.ForwardClientInput $ 2.call(ForwardClientInput.java:72) org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)上的.gradle.util.Swapper.swap(Swapper.java:38)在org.gradle.launcher.daemon.server.api上org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)处的.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)在org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed (DaemonCommandExecution.java:120)在org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)在org.gradle.launcher.daemon.server .exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:71) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50) at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) at org.grad org.gradle.launcher.daemon.server.exec.Build.Environment上的.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)在org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)的.doBuild(BuildBuildEnvironment.java:71)org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecutionion) .java:120),位于org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41),位于org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) )在org.gradle.launcher.daemon.server.DaemonStateCoordinator $ 1.run(DaemonStateCoordinator $ 1.run(DaemonStateCoordinator.java:246)在org.org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy $ 1.run(StartBuildOrRespondWithBusy.java:50)处。 gradle.internal.concurrent.ExecutorPolicy $ CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)在org.grad le.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) le.internal.concurrent.StoppableExecutorImpl $ 1.run(StoppableExecutorImpl.java:40)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java :615),位于java.lang.Thread.run(Thread.java:745)

Were you trying to create a generic class, or a concrete class whose constructor takes generic arguments? 您是要创建通用类,还是要创建其构造函数接受通用参数的具体类?

If you were trying to create a generic class, that can be instantiated for objects that extend AppCompatActivity & DialogInterface.OnDismissListener , you need to make the class generic (as in your edit). 如果您试图创建一个通用类,则可以为扩展AppCompatActivity & DialogInterface.OnDismissListener对象实例化该类,您需要使该类通用(如在编辑中一样)。 In a generic class, the class type parameters don't need to be repeated in the constructor definition, they are assumed by the compiler implicitly. 在泛型类中,不需要在构造函数定义中重复类类型参数,它们由编译器隐式假定。

If you were trying to create a class of some concrete or generic type whose constructor can accept objects that extend AppCompatActivity & DialogInterface.OnDismissListener , you need a way to explicitly cast that parameter to whatever type this.activity is defined as. 如果尝试创建某个特定类型或通用类型的类,其构造函数可以接受扩展AppCompatActivity & DialogInterface.OnDismissListener对象,则需要一种方法将该参数显式this.activitythis.activity定义为的任何类型。 The only way to assign your generic activity parameter to this.activity without casting is if they are the same type after type erasure. 在不强制this.activity情况下将常规activity参数分配给this.activity的唯一方法是类型擦除后它们是否为同一类型。

While it is possible to create a constructor whose arguments are generic, you cannot assign a generic argument to one of a different type (after type erasure) without casting. 虽然可以创建一个构造函数,该构造函数的参数是通用的,但是您不能在不进行强制转换的情况下将通用参数分配给其他类型的类型(在类型擦除之后)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM