2011-10-17 27 views
7

Tôi đang di chuyển một ứng dụng từ java sang Scala. Trong java tôi có somethng nhưgenerics bị chặn trong Scala (như <E mở rộng MyClass> trong Java)

abstract class CommonObjectInfo{//...} 
class ConcreteObject extends CommonObjectInfo{//...} 

abstract class AbstractWrapper<E extends CommonObjectInfo>{//...} 
class ConcreteWrapper extends CommonObjectInfo<ConcreteObject>{//...} 

Làm cách nào để thể hiện chính thức các đối tượng "hàm bao" trong Scala? Tôi

Trả lời

9
abstract class CommonObjectInfo 
class ConcreteObject extends CommonObjectInfo 

abstract class AbstractWrapper[E <: CommonObjectInfo] 
class ConcreteWrapper extends AbstractWrapper[ConcreteObject] 
5

Giải pháp thông thường là một từ agilesteel, nhưng đôi khi nó là hữu ích để kéo những thông tin kiểu "bên trong" lớp (đặc biệt là khi gõ vào câu hỏi được coi là một chi tiết thực hiện):

abstract class CommonObjectInfo 

class ConcreteObject extends CommonObjectInfo 

abstract class AbstractWrapper{ 
type objectInfo <: CommonObjectInfo 
} 

class ConcreteWrapper { 
    type objectInfo = ConcreteObject 
} 
Các vấn đề liên quan