如何为TestT类的特定构造器设置Comparable泛型约束?
实现特定构造器的Comparable类型限制方案
你之前尝试的public <T extends Comparable<T>>TestT()写法无效,原因是构造器上声明的<T>是构造器自身的局部泛型参数,和类的泛型<T>是完全独立的两个变量,根本起不到限制类泛型类型的作用。
Java语法不支持直接给单个构造器追加类泛型的约束(类的泛型约束只能在类声明时统一定义),要实现“部分构造器要求T实现Comparable
import java.util.ArrayList; public class TestT<T> { private ArrayList<T> arr; // 原无约束的无参构造器,若想强制用户通过工厂方法创建有约束实例,可改为private public TestT() { arr = new ArrayList<>(); } // 静态工厂方法:专门创建T实现Comparable<T>的TestT实例 public static <T extends Comparable<T>> TestT<T> createComparableInstance() { return new TestT<>(); } void push(T e) { arr.add(e); } }
使用示例
- 创建无约束的实例(不受Comparable限制):
TestT<Object> unrestricted = new TestT<>(); - 创建受Comparable约束的实例(仅当T实现Comparable
时编译通过): // String实现了Comparable<String>,编译正常 TestT<String> restricted = TestT.createComparableInstance(); // 自定义类未实现Comparable,编译报错 // TestT<MyUncomparableClass> error = TestT.createComparableInstance();
这种方式既保留了原构造器的无约束特性,又通过工厂方法实现了对特定实例的类型限制,完全符合你的需求。
内容的提问来源于stack exchange,提问作者VextoR
相关产品推荐
相关产品推荐

