仿制

2013-09-25 21 views
4

当与Java泛型编程巨资Java的简称,它是常见的有许多嵌套泛型:仿制

List<MyClass<MyClass2,MyClass3,List<MyClass4<MyClass5>>> my_list= new LinkedList<MyClass<MyClass2,MyClass3,List<MyClass4<MyClass5>>>(); 

这枚“作品”,所产生的代码的可读性受到影响。有没有办法避免这个问题?

是否可以定义一个新的“临时类型”?

type1= List<MyClass4<MyClass5>>; 
type2= MyClass<MyClass2,MyClass3,type1>; 
List<type2> my_list= new List<type2>(); 
+1

不幸的是,在Java中没有'typedef'等效的C/C++ – anubhava

回答

3

你可以在(空)类的形式定义一个新类型:

class Type1 extends List<MyClass4<MyClass5>> { } 

class Type2 extends MyClass<MyClass2, MyClass3, Type1> { } 

List<Type2> my_list= new List<Type2>(); 

当然,你会失去一些仿制药的灵活性,但也许你可以对一些常用的组合,这样做,甚至可能作为内部类。

+4

这是一个很好的解决方案,但唯一的缺点是'Type1'不能完全兼容'List >'在两个方向。 “Type1”可以分配给“List”,但不能以其他方式分配。 – buc

+0

@buc感谢提到。 'Type2'也适用于'MyClass '。 –

+1

-1我认为这在实践中不会很有帮助 - 它会迫使您使用'List >'的'Type1'实现,无论这可能会有效地消除参数多态性。 –