我正在尝试创建一个将字符串值映射到函数的映射.这是我创建的接口(如在Java 8中,但我不能使用它):interface Function<T, U> {U apply(T t); }现在,我创建了一个排序方法,根据一些属性对我的pojo进行排序:public <U extends Comparable<U>> void sortPojoBy(Function<Pojo, U> f) {Collections.sort(list, new Comparator<Book> () {@Overridepublic int compare(Pojo first, Pojo second) {return f.apply(first).compareTo(f.ap...
谁可以解释以下情况中发生的情况?为什么会出错,而另一个则没有?public class TestClass<T extends Comparable<T>> {protected T []items;public TestClass(int size, T... values) {items = (T[]) new Object[size];for (int v = 0; v < Math.min(size, values.length); v++) {items[v] = values[v];}}public T getItem() {return items[0];}public static void main(String []args) {System.out.println(new TestClass<>(2, 6)....
为什么在没有指定父类的每个其他泛型类型的类型的情况下对泛型类进行子类化时,在子类中将其视为普通类型? 例如,以下给出错误,因为s不是Map<整数,字符串>但是一张普通的地图.class Foo<T> {protected Map<Integer, String> s; }class Bar extends Foo {public Bar() {s.get(0).length();} }当然,如果Bar扩展Foo<无论>错误消失了.解决方法:在Java Language specification, Section §4.8:The supertype of a class may be a raw t...
我想这是一个重复的问题,但在浏览了大量相关问题之后,我找不到匹配的问题……是的,蹩脚的借口;) 我目前正在为POIs HSLF/XSLF实现开发一个通用接口.使用泛型的原因是支持Iterable接口,其中用户代码不需要向下转换为具体实现,即,如果他想要使用实现类或公共接口,则可以决定.当然,如果没有泛型,返回类型缩小按预期工作. 我的目标是最小化类的用户的参数声明 – 请参阅main方法.在内部,通用引用可能更复杂. 所以我想要这样的东西:(为简...
在Effective Java(第2版)第25项的最后一段中,它说:Arrays and generics have very different type rules. Arrays are covariant and reified; generics are invariant and erased.有人可以更好地定义与Java中的数组和泛型有关的粗体术语吗?我也不介意一些例子.解决方法:你没有提到你是否对某一特定概念感到困惑,所以我将尝试给出协方差和不变性的基本定义. 协方差保留类型排序,不变性不保留.这意味着子类型是否被保留(在逆变的情...
在尝试解决问题时,我最终编写了一个方法,该方法的参数在参数和返回类型中都没有提到,即< T>. void authenticate(凭据凭证)方法.对T的唯一依赖是在方法体中(前面的细节).所以我的问题是:该泛型类型是如何解决的?我找不到那种泛型类型参数的任何其他示例代码. 所以这种方法的主体是这样的public <T extends AuthResponse> void authenticate(Credentials credentials) {Call<T> call = getAuthCall(credentials);Response<T> respo...
我正在学习Generics.我已经为练习编写了以下代码.在这段代码中,我创建了一个通用方法,用于根据方法调用提供的值添加两个数字和两个字符串的连接,它应该添加Integer或连接字符串.class Kaushal28{public <T> void add(T a, T b){//System.out.println(a+b);} } public class NewClass59 {public static void main(String args[]){Kaushal28 k = new Kaushal28();k.add(5, 8);k.add("5","8"); } }我不确定这是否可以用一种方法完...
我尝试编写一个带有参数名称的类,并且可以返回给定对象的相应参数.目前,我的班级看起来像这样:public class ParamValue<T> {private String paramName;@SuppressWarnings("unchecked")public T getValue(Object obj) throws Exception {Class<?> c = obj.getClass();Field param = c.getDeclaredField(paramName);boolean isAccessible = param.isAccessible();param.setAccessible(true);Object value = param.get(obj);param.se...
我有父类:User.java和2个类:FacebookUser.java和TwitterUser.java它们是返回的实体,取决于使用DiscriminatorColumn的数据库中的类型列,我想写出正确的映射器来映射用户可能是实例的FacebookUser或TwitterUser.我有以下映射器似乎无法正常工作,只映射用户父级而不是子级:@Mapper public interface UserMapper {public static UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);User map(UserDTO userDTO);@InheritInve...
我想搬到Kotlin旧的Java项目,并发现有趣,无法将此转化为Kotlin而没有痛苦public interface BaseJView<P extends BaseJPresenter> {P createPresenter(); } public interface BaseJPresenter<V extends BaseJView> {void bindView(V view); }你能给出建议吗,我怎么能做到这一点?解决方法:一种方法是像这样使用recursive type definition:interface BaseJView<TSelf : BaseJView<TSelf, P>, P : BaseJPresenter<P, TSelf>> {fun cr...
请考虑以下代码示例:@SafeVarargs public static <U> Object[] sortedCopy(Comparator<? super U> comparator, U... values) {U[] copy = Arrays.copyOf(values, values.length);Arrays.sort(copy, comparator);return copy; //copy is implicitly cast to Object[] -> no heap pollution }public static <U> Object[] sortedCopy(U... values) {return sortedCopy(Comparator.naturalOrder(), values); //why does this compile?...
首先我要承认,我不是一个Java程序员.我来自C观点,看着别人的代码,并想知道……究竟是怎么回事? C确实具有类似于Java的泛型方法的模板化成员函数,但C模板化成员函数不能是虚拟的 – 也就是说,它们不能被覆盖.这个限制对我来说很有意义,因为虚拟(可覆盖)函数最终是函数指针,如果虚函数可能被模板化,那么类定义就无法知道要为自己生成多少函数指针. 但是Java手上的通用方法似乎完全没有被派生类覆盖. Java如何管理它?解决方法:C模板...
鉴于界面:public interface BasedOnOther<T, U extends BasedList<T>> {public T getOther();public void staticStatisfied(final U list);}BasedOnOther< T,U extends BasedList< T>>在我的用例中看起来非常难看.这是因为T类型参数已经在基础列表< T>中定义.部分,所以“丑陋”来自T需要输入两次. 问题:是否可以让Java编译器从BasedList< T>中推断出通用T类型.在泛型类/接口定义中? 最终,我想使用如下界面:class X implements ...
什么,如果可能的话,将是一个很好的解决方案,以实现我想要的以下所需的功能: >将例程的返回类型转换为例程参数的类型,例如, // Foo and Bar are two types of Common interface Common{} interface Foo extends Common {} interface Bar extends Common {}// Example interface public List<? extends Common> getFeatureByType(Class<? extends Common> clazz);// Example of what I want to achieve by using the (or a similar)...
鉴于具有以下结构的类.我试图确定泛型方法的调用者分配的参数T的类型.public class MyClass{public <T> Boolean IsSupportable() {Class typeOfT; // Need to determine Class for generic parameter T// Business Logic goes here return true; } }在C#中,我会使用“default(T)”或“typeof(T)”,但我试图在Java中这样做.有谁知道我是怎么做的?我真的不需要实例,我只需要Class定义.解决方法:你不能这样做.你可以做的是使方法签名...