簡體   English   中英

使用泛型在Java中進行可選參數化

[英]Optional parametrization in Java with Generics

參數化類時是否可以指定默認類型? 例:

// abstract class    
public abstract class AbsClass<T1 extends Par1Class, T2 extends Par2Class> {
    // code 
}

// parametrized imlementation class
public class RealClass extends AbsClass<ClassThatExtendsPar1, ClassThatExtendsPar2Class> {
   // code
}

// non-parametrized imlementation class
public class RealClass extends AbsClass {
   // code
}

在我的實現中,我必須指定NONE或ALL參數。 可以使第二個參數非強制性,如下所示:

// abstract class    
public abstract class AbsClass<T1 extends Par1Class, T2 extends Par2Class : default Par2Class > {
    // code 
}

// parametrized only mandatory imlementation class
public class RealClass extends AbsClass<ClassThatExtendsPar1> {
   // code
}

簡單回答:不,java不支持這樣的默認參數化。

從來沒有一個很好的理由這樣做。 通常,您指定泛型類型參數,因為某些方法參數接受或返回該類型的參數。 如果未指定有效,那似乎表明您打算不執行這些方法的任何有意義的實現。

無論如何,要解決您感知到的問題,只需為您不需要指定的任何類型參數指定“對象”。 或者使用另一個只有一個類型參數的抽象類擴展抽象類(在擴展調用中將Object指定為第二個類型參數)。

那么,您的案例的正確解決方案可能是

// parametrized only mandatory imlementation class
public class RealClass<StillGeneric extends Par1Class>
extends AbsClass<ClassThatExtendsPar1, StillGeneric> {
    // code
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM