java - 如何将泛型类型限制为 java 中的特定类型?

标签 java generics types

我有一个带有通用变量的类。我想将该变量限制为一个集合 类型(如汽车、自行车……)如下所示:

class Garage{
   Class<K> ownerStaff;

   public Garage(Car c){
      this.ownerStaff = c;
   }
   public Garage(Bike b){
      this.ownerStaff = b;
   }
   ...
}

因此,“genericVariable”只能是汽车、自行车或我想要的任何其他类型,但不能是任何类型。我怎样才能做这样的事情?

注意: 我想我可以创建一个父类“Vehicle”,然后这样写(如果我错了,请纠正我)

class Garage<K extends Vehicle>{
   Class<K> ownerStaff;

   public Garage(Class<K> c){
      this.ownerStaff = c;
   }
}

但我不想要一个父类并让我的所有类扩展“Vehicle”,并且我可能不想输入例如Garage<Car>当我实例化一个“车库”时。

谢谢

最佳答案

你的对象最终必须有某种共同的行为,否则将它们放在同一个Garage中就没有意义。因此,正如 @perelman 建议的那样,只需在接口(interface)中声明此常见行为并使用它(无泛型):

public interface Vehicle {
    // common behavior declared, if any
}

public class Car implements Vehicle {
    // Implementation
}

public class Bike implements Vehicle {
    // Implementation
}

public class Garage {
    Vehicle vehicle;

    public Garage(Vehicle v) {
       vehicle = v;
    }
}

关于java - 如何将泛型类型限制为 java 中的特定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9239343/

相关文章:

google-app-engine - 数据存储类别与字符串 : what is the difference?

c# - 从 Java 运行 C# 代码,反之亦然

java - Java 双重哈希问题

java - 取决于类型、泛型、继承或两者的实例化?

java - 无法构建实际的 Intellij IDEA 社区版

typescript - 根据 TypeScript 中的查找类型限制通用键类型

java - Hudson 部署项目 .war 以外的 Artifact 时出现问题

java - 从 Java Graphics 实例获取字符串

Java 通用到 Scala

c - 如果两种类型在 C 中彼此为 "compatible",这究竟意味着什么?