gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:54:54 30 4
gpt4 key购买 nike

我正在尝试解决一个问题,我必须创建一个将一个对象或对象列表作为通用类型的类。我不想创建多个类,因为我有所有其他字段公用。

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

主类。

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 Rat<T> {
private T obj ;

public Rat(T t) {
this.obj = t;
}

public void instOf() {
if(obj instanceof Dog) {
System.out.println((obj.getClass()).getName());
}
if(obj instanceof Cat) {
System.out.println("Instance of Cat");
}
if(obj instanceof List) {
for(Object object : ((List) obj).toArray()) {
System.out.println(((Cat)object).getName());
}
}
}
}

要作为单个对象或列表传递的类。

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()将单个对象转换为列表的库方法。

您将要发明一个复杂的设计,将大量知识放入 Rat 类中。你宁愿去拥有

  • Animal 接口(interface)或基类(用于 Cat/Dog 中的常用方法)
  • 只需要 Rat然后使用 List<Animal> 上课,或者可能是 List<? extends Animal>

意思是:你过度特化了你的 Rat 类。认真地说:不允许“单个对象”和列表。只需使用列表,并且(如果有的话)区分该列表中的元素数量。你的方法过于复杂,会让你的读者感到惊讶(以一种不好的方式)。不要那样做。

关于java - 创建泛型类以传递泛型类型(对象或列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52216587/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com