2012-09-05 44 views
1

我在Java第四版阅读思考,我遇到了这个代码常量在泛型类型参数

class SuperHero<POWER extends SuperPower> { 
    POWER power; 

    SuperHero(POWER power) { 
     this.power = power; 
    } 

    POWER getPower() { 
     return power; 
    } 
} 

我一直在寻找这个代码的整个类的定义和我似乎无法找到关键字POWER,所以我认为它是一个常量?在这种情况下,“POWER”究竟是什么?

这里是整个类定义

package tij4.generics; 

//: generics/EpicBattle.java 
//Demonstrating bounds in Java generics. 
import java.util.*; 

//Marker Interface 
interface SuperPower { 
} 

interface XRayVision extends SuperPower { 
    void seeThroughWalls(); 
} 

interface SuperHearing extends SuperPower { 
    void hearSubtleNoises(); 
} 

interface SuperSmell extends SuperPower { 
    void trackBySmell(); 
} 

class SuperHero<POWER extends SuperPower> { 
    POWER power; 

    SuperHero(POWER power) { 
     this.power = power; 
    } 

    POWER getPower() { 
     return power; 
    } 
} 

class SuperSleuth<POWER extends XRayVision> extends SuperHero<POWER> { 
    SuperSleuth(POWER power) { 
     super(power); 
    } 

    void see() { 
     power.seeThroughWalls(); 
    } 
} 

class CanineHero<POWER extends SuperHearing & SuperSmell> extends 
     SuperHero<POWER> { 
    CanineHero(POWER power) { 
     super(power); 
    } 

    void hear() { 
     power.hearSubtleNoises(); 
    } 

    void smell() { 
     power.trackBySmell(); 
    } 
} 

class SuperHearSmell implements SuperHearing, SuperSmell { 
    public void hearSubtleNoises() { 
    } 

    public void trackBySmell() { 
    } 
} 

class DogBoy extends CanineHero<SuperHearSmell> { 
    DogBoy() { 
     super(new SuperHearSmell()); 
    } 
} 

public class EpicBattle { 
    // Bounds in generic methods: 
    static <POWER extends SuperHearing> void useSuperHearing(
      SuperHero<POWER> hero) { 
     hero.getPower().hearSubtleNoises(); 
    } 

    static <POWER extends SuperHearing & SuperSmell> void superFind(
      SuperHero<POWER> hero) { 
     hero.getPower().hearSubtleNoises(); 
     hero.getPower().trackBySmell(); 
    } 

    public static void main(String[] args) { 
     DogBoy dogBoy = new DogBoy(); 
     useSuperHearing(dogBoy); 
     superFind(dogBoy); 
     // You can do this: 
     List<? extends SuperHearing> audioBoys; 
     // But you can't do this: 
     // List<? extends SuperHearing & SuperSmell> dogBoys; 
    } 
} // /:~ 

ADDED信息: 我也看了不同类别包含了这个包。并没有一个定义枚举“POWER”

回答

5

它只是一个通用类型名称,就像Tjava.util.List<T>中一样。作者为这种类型选择了一个更大的名字。

+0

我明白了,我最初认为你只能使用单个字母作为类型名称。 – KyelJmD