相关疑难解决方法(0)

如何获取泛型类型T的类实例

我有一个泛型课,Foo<T>.在一个方法中Foo,我想得到类型为T的类实例,但我无法调用T.class.

使用它的首选方法是什么T.class

java generics

659
推荐指数
12
解决办法
64万
查看次数

138
推荐指数
6
解决办法
4万
查看次数

Kotlin中的reified关键字如何工作?

我试图了解reified关键字的目的,显然它允许我们对泛型进行反思.

但是,当我把它放在外面时它的效果一样好.任何人都在关心何时产生实际差异

generics kotlin kotlin-reified-type-parameters

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

CompletableFuture | 然后应用vs thenCompose

我无法理解thenApply(和之间的区别thenCompose().

那么,有人可以提供有效的用例吗?

来自Java文档:

thenApply(Function<? super T,? extends U> fn)
Run Code Online (Sandbox Code Playgroud)

返回一个新的CompletionStage,当该阶段正常完成时,将使用此阶段的结果作为所提供函数的参数执行.

thenCompose(Function<? super T,? extends CompletionStage<U>> fn)
Run Code Online (Sandbox Code Playgroud)

返回一个新的CompletionStage,当此阶段正常完成时,将使用此阶段作为所提供函数的参数执行.

我得到的第二个参数thenCompose扩展了CompletionStage,thenApply而不是.

有人可以提供一个例子,我必须使用thenApply何时使用thenCompose

java java-8 completable-future

91
推荐指数
5
解决办法
4万
查看次数

如何创建通用数组?

我不理解泛型和数组之间的联系.

我可以使用泛型类型创建数组引用:

private E[] elements; //GOOD
Run Code Online (Sandbox Code Playgroud)

但无法使用泛型类型创建数组对象:

elements = new E[10]; //ERROR
Run Code Online (Sandbox Code Playgroud)

但它有效:

elements = (E[]) new Object[10]; //GOOD
Run Code Online (Sandbox Code Playgroud)

java generics

84
推荐指数
1
解决办法
10万
查看次数

为什么可以使用反射将Double添加到整数列表中

为什么这段代码没有任何例外?

public static void main(String args[]) {
    List<Integer> a = new ArrayList<Integer>();
    try {

        a.getClass()
            .getMethod("add", Object.class)
            .invoke(a, new Double(0.55555));

    } catch (Exception e) {
        e.printStackTrace();
    } 
    System.out.println(a.get(0));
}
Run Code Online (Sandbox Code Playgroud)

java

61
推荐指数
4
解决办法
2377
查看次数

Spring 3.2 Autowire泛型类型

所以我在Spring 3.2中有很多泛型,理想情况下我的架构看起来像这样.

class GenericDao<T>{}

class GenericService<T, T_DAO extends GenericDao<T>>
{
    // FAILS
    @Autowired
    T_DAO;
}

@Component
class Foo{}

@Repository
class FooDao extends GenericDao<Foo>{}

@Service
FooService extends GenericService<Foo, FooDao>{}
Run Code Online (Sandbox Code Playgroud)

遗憾的是,对于泛型的多个实现,自动装配会引发有关多个匹配bean定义的错误.我假设这是因为@Autowired类型擦除之前的进程.我找到或想出的每一个解决方案看起来都很难看,或者只是莫名其妙地拒绝工作.解决这个问题的最佳方法是什么?

java generics spring-mvc inversion-of-control autowired

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

可能的Java泛型(模板)专业化(覆盖具有特定类型的模板类型)

我想知道在Java中专门化泛型类型的选项是什么,即在模板化的类中对某些类型进行特定的覆盖.

在我的例子中,我是一个泛型类(类型为T)通常返回null,但返回""(空字符串),当T是String类型时,或者当它是Integer类型时返回0(零)等.

仅提供方法的类型特定重载会产生"方法不明确"错误:

例如:

public class Hacking {

  public static void main(String[] args) {
    Bar<Integer> barInt = new Bar<Integer>();
    Bar<String> barString = new Bar<String>();

    // OK, returns null
    System.out.println(barInt.get(new Integer(4)));

    // ERROR: The method get(String) is ambiguous for the type Bar<String>
    System.out.println(barString.get(new String("foo")));
  }

  public static class Bar<T> {

    public T get(T x) {
      return null;
    }

    public String get(String x) {
      return "";
    }  
  }
}
Run Code Online (Sandbox Code Playgroud)

是使用特定类型子类化泛型类的唯一选项(请参阅以下示例中的StringBar?

  public static void main(String[] args) {
    Bar<Integer> barInt = new Bar<Integer>();
    StringBar …
Run Code Online (Sandbox Code Playgroud)

java generics

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

为什么Java的Collection <E> .toArray()返回一个Object []而不是一个E []?

在Java泛型之前,Collection.toArray()无法知道开发人员期望的数组类型(特别是对于空集合).据我了解,这是成语背后的主要理由collection.toArray(new E[0]).

使用泛型,Collection<E>.toArray()只能返回一个充满实例E和/或其特化的数组.我想知道为什么返回类型仍然Object[]不是E[].在我看来,返回一个E[]而不是不Object[]应该破坏现有的代码.

请参阅:Collection.toArray(),Collection.toArray(T[])以及相关主题的java:(字符串[])List.toArray()给出ClassCastException异常

java generics collections toarray

20
推荐指数
2
解决办法
5537
查看次数

如何将双精度型添加到Integer的ArrayList中?(Java)

我试图了解如何将的Double值包含在ArrayListInteger。的numListArrayListInteger,并且从它的值是一个Double

这是代码:

package bounded.wildcards;

import java.util.ArrayList;
import java.util.List;

public class GenericsDemo {

    public static void main(String[] args) {
        // Invariance Workaround
        List<Integer> numList = new ArrayList<>();
        GenericsDemo.invarianceWorkaround(numList);
        System.out.println(numList);
    }

    static <T extends Number> void invarianceWorkaround(List<T> list) {

        T element = (T) new Double(23.3);  
        list.add(element);
    }

}
Run Code Online (Sandbox Code Playgroud)

这将编译并运行而不会出现错误。

java generics arraylist

15
推荐指数
1
解决办法
1439
查看次数