【问题标题】:How can i create list of datatype of an existing object in java如何在java中创建现有对象的数据类型列表
【发布时间】:2012-12-29 22:19:53
【问题描述】:

这个问题说明了一切。这是我想要的一个例子

String s = new String();
List<s.type> ls = new ArrayList<s.type>();

类似的东西,或任何优雅的方式来实现这一点,请不要使用多个 if 条件或条件逻辑,因为可能有无限的数据类型,我在这里仅使用字符串作为示例,它可以是任何东西。

【问题讨论】:

  • 好吧,实际上有人给出了一个非常接近的答案,现在删除了答案:/那些尴尬的时刻.....

标签: java generics object types


【解决方案1】:

如果你想获取 s 的运行时类型并在泛型中使用它,这是不可能的。 Java 中的泛型仅在编译时用于类型检查和类型推断。泛型的信息在运行时被擦除,所以运行时无法区分List&lt;String&gt;List&lt;Integer&gt;

如果你只是想用 s 的编译时已知类型创建一个泛型,那么它没有意义,因为你已经知道 s 的类型并且你可以为它写一个类名。

【讨论】:

    【解决方案2】:

    如果我理解正确,你想知道运行时实例(object)的类(type)(existing) ,但正如 Petr 解释的那样,这与泛型无关。

    public class Types {    
     public static void main(String[] args) {
         String s = "";
         Runtime r = Runtime.getRuntime();
         Types t = new Types();
    
         List<Class> types = new LinkedList<Class>();         
         types.add(Integer.class);
         types.add(t.getClass());
         types.add(r.getClass());
         types.add(s.getClass());
    
         for (Class type :types) {
             System.out.println(type.getSimpleName());
         }         
     }    
    }
    

    哪个输出:

    Integer
    Types
    Runtime
    String
    

    但是,很少需要这种方法,因此请重新考虑是否有更简单的解决方案来解决您的问题。如果你还想这样处理:

    编辑:

    您问题的另一种解释导致动态通用列表作为答案:

    public static <T> List<T> createListOfType() {
        return new ArrayList<T>();
    }
    
    public static void main(String[] args) {
        List<String> a = createListOfType();    
        List<Integer> b = createListOfType();
        a.add("");
        b.add(2);
        a.add(2); // remove this line to compile
        b.add(""); // remove this line to compile       
    }
    

    【讨论】:

    • 这对我的应用程序的另一部分很有用,提高了优雅性和可扩展性,谢谢。但不是我的问题的解决方案。
    • 啊,其他实现接近我正在寻找的东西谢谢。
    • 在这两种方法中,type 都没有被使用,应该被移除。
    • 如果您是“有人实际上给出了非常接近的答案,现在删除了答案”,我为窃取答案而道歉,但我想帮助 OP。不过不要投反对票:)
    猜你喜欢
    • 1970-01-01
    • 2020-06-09
    • 2021-04-15
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2021-08-13
    • 2011-09-29
    • 1970-01-01
    相关资源
    最近更新 更多