user1514362
user1514362

Reputation: 127

Switch Statement gives Incompatible Types error

I am trying to compile and I get this error:

enigma/Rotor.java:30: incompatible types found : java.lang.String required: int     switch(name){
1 error

Why am I getting this error? How do I fix it? It's in the package and I can't seem to figure it out. Here's the code:

String label;

Rotor(){;}

Rotor(String name){
  switch(name){
    case "B":
      conversion_chart = B;
      break;
    case "C":
      conversion_chart = C;
      break;
    case "I":
      conversion_chart=I;
      notch = NOTCH[0];
      break;
    case "II":
      conversion_chart=II;
      notch = NOTCH[1];
      break;
    case "III":
      conversion_chart=III;
      notch = NOTCH[2];
      break;
    case "IV":
      conversion_chart=IV;
      notch = NOTCH[3];
      break;
    case "V":
      conversion_chart=V;
      notch = NOTCH[4];
      break;
    case "VI":
      conversion_chart=VI;
      notch = NOTCH[5];
      break;
    case "VII":
      notch = NOTCH[6];
      conversion_chart=VII;
      break;
    case "VIII":
      notch = NOTCH[7];
      conversion_chart=VIII;
      break;
  }
  label = name;
  position = 0;
}

Upvotes: 9

Views: 21238

Answers (6)

zjf
zjf

Reputation: 11

If you're using maven then change build in pom as following else change JDK version as 1.8+

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

Upvotes: 1

kosa
kosa

Reputation: 66637

switch(name)

switch statement with String is supported from Java7 onwards only.

I guess the compiler version you are using is less than Java7

Options:

  1. You need to either upgrade to Java7
  2. Change switch statement to if/else
  3. Use int in switch instead of String

Upvotes: 12

Suraj Jogdand
Suraj Jogdand

Reputation: 306

If you are using maven project then simply you can add following piece of code to ypur pom.xml and resolve your problem :

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

Upvotes: 6

PermGenError
PermGenError

Reputation: 46398

switch accepts a String from java 7. prior to java 7 only int compatible types (short,byte,int, char) can be passed as switch arguments

Upvotes: 4

Don Branson
Don Branson

Reputation: 13709

In Java, you can only do a switch on byte, char, short, or int, and not a String.

Upvotes: -1

Alex Coleman
Alex Coleman

Reputation: 7326

You cannot switch over a String instance, only int (and byte/char/short, but not long/double), unless you have Java7+. Your best option now is to change to if else statements, like so:

if("B".equals(string)) {
    //handle string being "B"
} else if("C".equals(string)) {
    //handle string being "C"
} else ...

For more info on switching, see the Oracle tutorial. They mention the Java7 String functionality:

In Java SE 7 and later, you can use a String object in the switch statement's expression.

Upvotes: 0

Related Questions