gpt4 book ai didi

java - 如何将我的类传递给该类的通用规范?

转载 作者:行者123 更新时间:2023-12-02 11:23:57 24 4
gpt4 key购买 nike

我有以下方法签名

public abstract class AbstractFilterParametersWithSpecificationSorting<T> extends AbstractFilterParameters
...

public void registerOrderSpecification( final String key, final Class<? extends OrderSpecification<T>> spec ) {
...

我正在传递以下内容

    this.registerOrderSpecification(
AbstractActivityLogWithSiteUser.Index.USER_FULL_NAME,
SortActivityLogUserOrderSpecification.class );

有这个类定义

public class SortActivityLogUserOrderSpecification<AL extends AbstractActivityLogWithSiteUser<?>>
extends AbstractOrderSpecification<AL> implements OrderSpecification<AL>

这里是 javac 不喜欢的地方(IDEA 认为它应该可以工作,但 IDEA 运行在 Java 8 上,并且代码必须在 Java 7 上编译)

Error:(12, 21) java: method registerOrderSpecification in class com.myapp.service.principal.AbstractFilterParametersWithSpecificationSorting<T> cannot be applied to given types;
required: java.lang.String,java.lang.Class<? extends com.myapp.specification.OrderSpecification<AL>>
found: java.lang.String,java.lang.Class<com.myapp.repository.activitylog.specification.SortActivityLogUserOrderSpecification>
reason: actual argument java.lang.Class<com.myapp.repository.activitylog.specification.SortActivityLogUserOrderSpecification> cannot be converted to java.lang.Class<? extends com.myapp.specification.OrderSpecification<AL>> by method invocation conversion

我可以投吗?或者我在某处遗漏了一些问号?

最佳答案

我尝试了你的代码,然后开始简化它以得到一个显示相同问题的较小示例。我终于得到了这个(更简单的)代码:

abstract class MyList<T> implements java.util.List<T> {
}

public class TestGenerics2<T> {

public void processListClass(final Class<? extends java.util.List<T>> spec ) {
}

public void tryIt() {
this.processListClass(MyList.class);
}

}

生成此错误:

TestGenerics2.java:11: processListClass(java.lang.Class<? extends java.util.List<T>>) in TestGenerics2<T> cannot be applied to (java.lang.Class<MyList>)

我认为你应该转换它(或重构你的代码,这样你就不需要该泛型的复杂性)。

喜欢Jon Skeet once said :

Sometimes Java generics just doesn't let you do what you want to, and you need to effectively tell the compiler that what you're doing really will be legal at execution time.

关于java - 如何将我的类传递给该类的通用规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30631395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com