0 0

List 添加 Class 泛型5

public void test(Class clazz)
{
   List list = new ArrayList();
}
这个clazz是从别的地方传过来的,可不可以指定list只能存储这个Class

我用 List<clazz> list = new ArrayList<clazz>(); 并且在类名后加上 <clazz>编译可以通过,但是运行时在后面还可以给list  add不同于clazz的对象,不知道这是为什么?

问题补充:
List<clazz> list = new ArrayList<clazz>();
是错误的
<>中应该是类型.并不是实例clazz是Class类的实例所以你上面的代码是错误的.

这种时候应该使用接口来规范类型



那我怎样做才能实现这个功能呢,网上说用反射,不过还没搞清楚。

Thanks in advance!
问题补充:
public class Test<T> {

public void test(Class<T> clazz){

List<Class<T>> list = new ArrayList<Class<T>>();

Object str = "aa";
list.add((Class<T>) str);
}

public static void main(String[] args){

Test t = new Test();
t.test(String.class);

}
}
差不多是这个样子的,但运行的时候会出"java.lang.ClassCastException: java.lang.String", 不知道为什么
问题补充:
其实我就是想
List list = new ArrayList(); 的时候 这个list中只能存放传进去的指定的class, 比如String或者其他自定义的类。
谢谢大家了。
问题补充:
比如 Test t = new Test();
    t.test(String.class);

这时list.add("abc");是可以的
但list.add(new Timestamp(100))则不行
2008年12月12日 09:49

6个答案 按时间排序 按投票排序

0 0

采纳的答案

都不明白 楼主要实现啥 根据你最后补充的想到的

public class Test {

    public void test(Class<?> clazz){ 
        java.util.List<Class<?>> list = new java.util.ArrayList<Class<?>>(); 
        list.add(clazz);
        
        for (Class<?> clz : list) {
            System.out.println("---" + clz.getName());
        }
    } 

    public static void main(String[] args){ 
        try {
            Test t = new Test(); 
            t.test(Class.forName("java.lang.String")); 
            t.test(java.util.List.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    } 
} 

2008年12月12日 17:54
0 0

<T>的具体类型要在实例的时候给出..下班去了

public class NewClass<T> {
    public void test(T obj){
        List<T> list = new ArrayList<T>();
        list.add(obj);
    }

    public static void main(String[] args) {
        NewClass<String> t = new NewClass<String>();
        t.test("sssss");
    }
}

2008年12月12日 17:36
0 0

请确认下 你想实现的是什么?

2008年12月12日 17:35
0 0

引用

public class NewClass<T> {  
    public List<T> test() {  
        return new ArrayList<T>();  
    }  
    public static void main(String[] args) {  
        NewClass<String> nc = new NewClass<String>();  
        nc.test().add("aaa");//这里只能是String  
    }  


这个方法完全可以满足你...

如果你定要那样~ 只有BT版本的啦~~
package org.test.jy;

/**
 *
 * @author Administrator
 */
public interface List<E extends JyTest> extends java.util.List<E> {
    
}


package org.test.jy;

/**
 *
 * @author Administrator
 */
public class ArrayList<E extends JyTest> extends java.util.ArrayList<E> 
        implements org.test.jy.List<E>{
    
}


package org.test.jy;

/**
 *
 * @author Administrator
 */
public class JyTest {
    
    private String name;
    private String sex;

    public JyTest(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    
}


package org.test.jy;
/**
 *
 * @author yangtao309
 */
public class Test {
    public static void main(String[] args) {
        List<JyTest> list = new ArrayList<JyTest>();
        list.add(new JyTest("test1", "male"));
        list.add(new JyTest("test2", "female"));
        list.add(new JyTest("test3", "female"));
        list.add(new JyTest("test4", "male"));
        list.add(new JyTest("test5", "male"));
        
        for(JyTest jt:list) {
            System.out.println("---" + jt.getName());
        }
    }
}


呵呵~

2008年12月12日 16:47
0 0

public class NewClass<T> {
    public List<T> test() {
        return new ArrayList<T>();
    }
    public static void main(String[] args) {
        NewClass<String> nc = new NewClass<String>();
        nc.test().add("aaa");//这里只能是String
    }
}

比如这样,不知道是不是你想要的.

2008年12月12日 15:35
0 0

List<clazz> list = new ArrayList<clazz>();
是错误的
<>中应该是类型.并不是实例clazz是Class类的实例所以你上面的代码是错误的.

这种时候应该使用接口来规范类型

2008年12月12日 10:13

相关推荐

    Java泛型的用法及T.class的获取过程解析

    * 集合框架:泛型可以用于集合框架中,例如List、Map,U&gt;等。 * DAO设计模式:泛型可以用于DAO设计模式中,例如BaseHibernateEntityDao等。 * 工具类:泛型可以用于工具类中,例如工具类的静态方法可以使用泛型。 五...

    json字符串转化为list泛型

    在Java编程中,我们经常需要将JSON格式的数据转换为Java对象,这通常涉及到将JSON字符串转化为List泛型。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...

    LIST泛型排序

    当`List`中的元素是泛型类型时,我们可能需要根据这些泛型对象的某个属性来对列表进行排序。这就是“LIST泛型排序”所涉及的主题。在本篇文章中,我们将深入探讨如何实现这个功能,并通过一个具体的示例来阐述。 ...

    简单的List泛型模拟

    在Java编程语言中,泛型是一种强大的特性,它允许我们在编写代码时指定容器(如List、Set、Map等)所存储的数据类型。这样可以确保在编译时进行类型检查,提高代码的安全性和可读性。"简单的List泛型模拟"这个主题...

    excel中取出泛型数据存入泛型的list中

    我们可以定义一个泛型类来表示这些对象,然后使用POI或NPOI读取Excel数据,创建该类的实例,并将它们添加到泛型List中。 以下是一个简单的Java示例,展示如何使用Apache POI从Excel提取泛型数据并存入List: ```...

    C#重要知识之——泛型列表List例子

    1. 泛型约束:`List&lt;T&gt;`支持泛型约束,如`where T : class`限制`T`为引用类型,`where T : struct`限制为值类型,还可以定义接口约束、基类约束等。 2. 扩容机制:当列表容量不足时,`List&lt;T&gt;`会自动扩容。默认情况...

    java泛型指南 经典

    泛型方法允许我们在不改变类本身的情况下,为类添加泛型行为。例如: ```java public class GenericMethodExample { public static &lt;T&gt; void process(T t) { // 处理逻辑 } } ``` #### 六、与旧代码交互 ##### ...

    很好的Java泛型的总结

    例如,add1(List&lt;Object&gt; list)方法只能添加Object类型的数据,add2(List&lt;?&gt; list)方法可以添加任何类型的数据,add3(List&lt;? extends Object&gt; list)方法可以添加Object或其子类的数据,add4(List&lt;? super Children&gt; ...

    C#winform使用泛型集合存储数据使用DataGridView显示和删除数据

    泛型集合`List&lt;T&gt;`继承自`Collection&lt;T&gt;`,它实现了`IList&lt;T&gt;`、`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口,提供了添加、删除、查找和遍历元素的能力。这里的`T`代表一个类型参数,可以是任何引用类型或值类型。例如...

    泛型讲解 类型通配符

    2. 作用:表示各种泛型的父类,例如 `List&lt;String&gt;` 和 `List&lt;Integer&gt;` 都是 `List&lt;?&gt;` 的子类。 3. 限制:不能向类型通配符集合中添加元素,因为不知道集合里的元素类型。 泛型方法: 1. 定义:使用类型形参定义...

    泛型编程小实例(以List为例)

    - **声明泛型类**:如自定义一个泛型栈`public class MyStack&lt;T&gt; { ... }`,`T`为类型参数,代表栈中元素的类型。 - **声明泛型接口**:如`public interface MyList&lt;T&gt; { ... }`,`T`为接口中方法使用的类型。 - ...

    泛型java的泛型知识,非常有用

    例如,`List&lt;?&gt;` 表示未知类型的列表,只能从中读取数据,但不能添加新元素。 - 在 `TestGen0Medthod1` 方法中,`List&lt;String&gt;` 和 `List&lt;Object&gt;` 之间的关系不满足继承原则,因此不能直接转换。而 `List&lt;?&gt;` 可以...

    关于java基础的泛型的练习

    - 泛型集合不允许存储null(除了null是类的实例,如`List&lt;Class&lt;?&gt;&gt;`)。 6. 泛型和多态: - 泛型类的子类可以有自己的类型参数,但必须是父类类型参数的子类型,如`class MyArrayList&lt;T&gt; extends ArrayList&lt;T&gt;`...

    泛型和泛型集合类用法

    `List&lt;T&gt;`类是一种泛型集合类,用于存储相同类型的对象列表。它提供了丰富的操作方法,可以方便地对列表中的对象进行添加、删除、查找等操作。 ##### 示例代码分析: ```csharp List&lt;string&gt; names = new List(); ...

    关于java的泛型.doc

    使用泛型时,可以通过`extends`关键字添加类型限制,例如`List&lt;? extends Number&gt;`表示列表中的元素必须是`Number`或其子类。这样可以确保类型安全,同时保持代码的灵活性。 ### 泛型与数据类型转换 泛型的一个...

    java泛型深入.pdf

    Java泛型还支持带有通配符的泛型类型,例如`List&lt;?&gt;`表示未知类型的`List`,这是不可变的。`List&lt;? extends T&gt;`表示`T`类型或其子类型的`List`,而`List&lt;? super T&gt;`表示`T`类型或其父类型的`List`。 使用泛型时,...

    Java泛型_Java中的泛型结构_

    - 实例化泛型(Instantiation):在使用泛型时,为类型参数提供具体类型,如 `Box&lt;Integer&gt;` 或 `List&lt;String&gt;`。 2. 泛型类: - 定义:`class MyClass&lt;T&gt; { ... }`,这里的 `T` 是类型参数,可以在类的方法和...

    泛型笔记学习2009

    泛型在Java集合框架中的应用尤其广泛,例如`List`、`Set`和`Map`等接口和实现类都支持泛型。这使得开发者可以明确指定集合中元素的类型,从而避免了类型转换错误。 以下是一个使用泛型的`Map`的示例: ```java // ...

Global site tag (gtag.js) - Google Analytics