假设我有类颜色的类。我想创建一些子课程,红色,绿色和蓝色。然后,在一个完全独立的类中,我有一个类型为 Color 的名为 Rainbow 的List。我希望能够将所有类型的颜色(红色,贪婪,蓝色)放入列表彩虹,以后我可以搜索列表 Rainbow 通过一种颜色来查看它是否包含其中一种颜色。这是我想要完成的一些伪代码:
class Color(){}
class Red extends Color(){}
class Blue extends Color(){}
class Green extends Color(){}
class JustSomeClass(){
List<Color> Rainbow;
Rainbow.add(new Red());
Rainbow.add(new Blue());
Rainbow.add(new Green());
public Color getTypeOfColor(typeOfColor){
for(Color c : Rainbow){
if(c.getType().equals(typeOfColor)){
return c;
}
}
}
}
我不熟悉Java,知道实现这一目标的好方法。有人能指出我正确的方向吗?
答案 0 :(得分:1)
你应该考虑一些事情。集合(例如List
)使用hashCode()
方法和equals()
方法来完成工作。您必须为类Color
覆盖这些方法,以便Collection知道该怎么做。
之后,你应该考虑Color
真正做了什么。每种颜色都是独特的?你的彩虹可以有多种颜色吗?如果不是(每种颜色红色与所有颜色相同)使用Set。如果有多种口味(超过一种具体的红色),那么你的清单可能会更好。
这里是Set one。运行时,会打印false
,然后打印true
。
public class RainbowTest {
public static void main(String[] args) {
Set<Color> rainbow = new HashSet<>();
rainbow.add(new Red(.1f));
rainbow.add(new Blue(.1f));
rainbow.add(new Green(.1f));
System.out.println(rainbow.contains(new Blue(.5f)));
System.out.println(rainbow.contains(new Red(.1f)));
}
}
abstract class Color {
private final float intensity;
public Color(float intensity) {
this.intensity = intensity;
}
public float getIntensity() {
return intensity;
}
@Override
public int hashCode() {
int hash = 3;
hash = 83 * hash + Float.floatToIntBits(this.intensity);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Color other = (Color) obj;
if( this.intensity != other.intensity )
return false;
return true;
}
}
class Red extends Color {
public Red( float intensity ) {
super( intensity );
}
}
class Green extends Color {
public Green( float intensity ) {
super( intensity );
}
}
class Blue extends Color {
public Blue( float intensity ) {
super( intensity );
}
}
答案 1 :(得分:0)
通用&lt; color&gt;不会允许它的子类 将其用作&lt; T extends color&gt;
答案 2 :(得分:0)
你可以有一个类RainBow,它将扩展List的具体实现。
这是因为RainBow实际上 IS 是一个颜色列表。
public class RainBow extends ArrayList<Color> {
public void addColor(Color color)
{
this.add(color);
}
public Color getTypeOfColor(String typeOfColor){
for(Color c : this){
if(c.getClass().getSimpleName().equals(typeOfColor)){
return c;
}
}
return null;
}
}
然后您可以像这样使用此类:
Red red = new Red();
Blue blue = new Blue();
Rainbow rainbow = new Rainbow();
rainbow.add(red);
rainbow.add(blue);
if (rainbow.getTypeOfColor("Yellow") == null) {
//Color doesn't exist
}
if (rainbow.getTypeOfColor("Red") != null) {
//Color exists
}
请注意,这会使用类名进行比较。