以下のプログラムで、何故エラーが出てしまうのでしょうか。

▪️Test85.java

```

    import java.util.function.*;
    
    public class Test85 {
        public static void main(String[] args) {
    //      Hero85 h = new Hero85();
            (Cat85 c) -> {
                return c.getHp();
                }
        }
    }
    
```

▪️Cat85.java

```

    public interface Cat85 {
        public int hp;
    
        Cat85() {
            this.hp = 100;
        }
    
        public  abstract int getHp() {
            return this.hp;
        }
    
    }
    
```

▪️Error Log

```

    The left-hand side of an assignment must be a variable
    Multiple markers at this line
        - Syntax error, insert "AssignmentOperator Expression" to
         complete Expression
        - Syntax error, insert ";" to complete BlockStatements
    
```

ご回答お願いします
CC BY-SA 3.0
2016-01-07T08:39:10.077
20711
2016-01-07T17:38:38.863
2016-01-07T09:11:50.740
76
13922
question
java
The left-hand side of an assignment must be a variable エラーが出る
Cat85はインタフェースで宣言されています。そのため、以下のコンパイルエラーが出るかと思います。

  * インタフェースがコンストラクタを持つことはできない

また、abstractメソッドで宣言されているgetHp()は、抽象メソッドですので、

  * 抽象メソッドは本文を持つことはできない

とコンパイルエラーとなるでしょう。

Cat85を通常のJavaクラスにすればよいかと思いますので、例えば

```

    public class Cat85 {
        public int hp;
    
        Cat85() {
            this.hp = 100;
        }
    
        public int getHp() {
            return this.hp;
        }
    }
    
```

として、Cat85インスタンスが実体化したときに変数hpに100が入ります。

おそらくTest85クラスで実装したいのは、抽象化されたCat85のインスタンスを取得して、そのhpの値などを取得しようとしたのではないかと思いますので、かんたんな例ですが、次のようにすると、java8から利用できるstreamAPIの機能を使って、Cat85のインスタンスを取得して、その中に入っているhpの値が返されます。

```

    public class Test85 {
        public static void main(String[] args) {
    
            Supplier<Cat85> supplier = () -> new Cat85();
            int hp = supplier.get().getHp();
    
            System.out.println(hp);
        }
    }
    
```

おそらくSupprierで提供されるクラスが、インタフェースのCat85を実装した何かを返す、がしたかったのかと思います。
CC BY-SA 3.0
2016-01-07T17:38:38.863
20722
2016-01-07T17:38:38.863
5778
20711
answer