Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建泛型类以传递泛型类型(对象或列表)_Java_Generics - Fatal编程技术网

Java 创建泛型类以传递泛型类型(对象或列表)

Java 创建泛型类以传递泛型类型(对象或列表),java,generics,Java,Generics,我试图解决一个问题,我必须创建一个类,将对象或对象列表作为泛型类型。我不想创建多个类,因为我有所有其他公共字段 以下是我所做的,但我不确定从长远来看是否安全 主课 public class TestGeneric{ public static void main(String[] args) { List<Cat> cats = new ArrayList<>(); cats.add(new Cat("Tom"));

我试图解决一个问题,我必须创建一个类,将对象或对象列表作为泛型类型。我不想创建多个类,因为我有所有其他公共字段

以下是我所做的,但我不确定从长远来看是否安全

主课

public class TestGeneric{

    public static void main(String[] args) {

        List<Cat> cats = new ArrayList<>();
        cats.add(new Cat("Tom"));
        cats.add(new Cat("Jerry"));
        cats.add(new Cat("Billi"));

        Dog dog = new Dog("Bow");

        new Rat<>(cats).instOf();
        System.out.println();
        new Rat<>(dog).instOf();
    }
}
要作为单个对象或列表传递的另一个类

class Dog {
    private String name;

    public Dog() {}

    public Dog(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Dog [name=" + name + "]";
    }

}
class Cat {
    private String name;

    public Cat() {}

    public Cat(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Dog [name=" + name + "]";
    }   
}
请建议这是正确的方法,还是有其他更好的方法

单个实例可以很容易地表示为带有一个条目的列表。甚至还有
Collections.singletonList()
library方法将单个对象转换为列表

你将要发明一个复杂的设计,将大量的知识投入到这个耗子类中。你宁愿去吃晚饭

  • 动物接口或基类(用于Cat/Dog中的常用方法)

  • 简单地让
    Rat
    类然后使用
    List
    ,或者可能是
    List对于您所展示的示例,您应该提供一个
    消费者
    ,根据类型来做您想做的“事情”:

    class Rat<T> {
        private T obj ;
        private Consumer<T> consumer;
    
        public Rat(T t, Consumer<T> consumer) {
            this.obj = t;
        }
    
        public void instOf() {
          consumer.accept(obj);
        }
    }
    
    class Rat<T> {
        private T obj ;
        private Consumer<T> consumer;
    
        public Rat(T t, Consumer<T> consumer) {
            this.obj = t;
        }
    
        public void instOf() {
          consumer.accept(obj);
        }
    }
    
    class Rat {
        private Runnable r;
    
        public Rat(Runnable r) {
            this.r = r;
        }
    
        public void instOf() {
          r.run();
        }
    }