获取Class <T> [Runtime-Type Token]的实例

Mar*_*hke 6 java generics

我创建了一个Preferences类,对于Getters我不想使用Runtime-Type Token.

所以这是我的getter方法:

public <T> T get(String key, Class<T> clazz) {
    // do some crazy stuff (e.g. Double <-> Float)
}
Run Code Online (Sandbox Code Playgroud)

到此为止,一切正常.但我希望class参数是可选的.

boolean b = preferences.get(key);
Run Code Online (Sandbox Code Playgroud)

所以我添加了一个额外的方法:

public <T> T get(String key) {
    // return get(key, Class<T>);
}
Run Code Online (Sandbox Code Playgroud)

现在问题:有没有办法做到这一点?有没有办法获得/的实例Class<T>.

可以使用一个小的解决方法:

public <T> T get(String key, T... args) {
    return get(key, (Class<T>) args.getClass().getComponentType());
}

public <T> T get(String key, Class<T> clazz) {
    System.out.println("key  : " + key);
    System.out.println("clazz: " + clazz);
}

// using
Boolean b = get("mykey");
Run Code Online (Sandbox Code Playgroud)

Mar*_*hke 3

通过一个小的解决方法就可以实现。

public <T> T get(String key, T... args) {
    return get(key, (Class<T>) args.getClass().getComponentType());
}

public <T> T get(String key, Class<T> clazz) {
    System.out.println("key  : " + key);
    System.out.println("clazz: " + clazz);
}

// using
Boolean b = get("mykey");
Run Code Online (Sandbox Code Playgroud)

杰普,我也不喜欢可变参数,但到目前为止它还有效。