这是通用的自动装箱吗?

Ste*_*ume 3 java generics autoboxing

分配值而不使用通常的表示法,例如"this.<Double> getAnything(int flag)"

private <T> T getAnything(int flag) {
    Object o = null;
    if (flag==0)
        o=new String("NewString");
    else if (flag==1)
        o=new Double(0D);
    return (T)o;
}


private void someMethod() {
    String s = getAnything(0);
    Double d = getAnything(1);
}
Run Code Online (Sandbox Code Playgroud)

在过去,只有方法上的返回对象和接收类型上的简单强制转换就足够了,因此在接收器对象上缺少通用符号,它更加相似和快速写入,还有其他任何提示吗?

pol*_*nts 5

关于类型安全

目前尚不清楚你要做什么,但应该指出的是,你的代码中没有任何类型的安全性.

Double d = getAnything(0);
// compiles fine, but throws ClassCastException at run time
Run Code Online (Sandbox Code Playgroud)

这首先打败了使用泛型的目的.

当你写这篇陈述时,你引入了这种不自由的东西:

return (T)o; // warning: Type safety: Unchecked cast from Object to T
Run Code Online (Sandbox Code Playgroud)

相关问题

也可以看看

  • Effective Java 2nd Edition,Item 24:消除未经检查的警告

论Typesafe异构容器

也许你想要像Josh Bloch所说的Typesafe异构容器.以下是Neal Gafter博客的引用:

这是一个简单但完整的API示例,它使用THC模式中的类型令牌,来自Josh的2006 JavaOne讲话:

public class Favorites {

    private Map<Class<?>, Object> favorites =
        new HashMap<Class<?>, Object>();

    public <T> void setFavorite(Class<T> klass, T thing) {
        favorites.put(klass, thing);
    }
    public <T> T getFavorite(Class<T> klass) {
        return klass.cast(favorites.get(klass));
    }

    public static void main(String[] args) {
        Favorites f = new Favorites();
        f.setFavorite(String.class, "Java");
        f.setFavorite(Integer.class, 0xcafebabe);

        String s = f.getFavorite(String.class);
        int i = f.getFavorite(Integer.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

通过这种模式,您可以获得类型安全性; int i = f.getFavorite(String.class);确实编译(这是一件好事!).

也可以看看


在自动装箱

Autoboxing是从原语int到引用类型的隐式转换Integer; autounboxing是相反的转换.所述问题与自动装箱无关.

也可以看看

相关问题


归档时间:

查看次数:

676 次

最近记录:

15 年,7 月 前