Skip to content

Commit fe97d98

Browse files
myluckagainpedja4
authored andcommitted
BAEL-1553 (eugenp#3679)
1 parent 6385ba4 commit fe97d98

6 files changed

Lines changed: 127 additions & 0 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.baeldung.casting;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
6+
public class Animal {
7+
private static final Logger LOGGER = LoggerFactory.getLogger(Animal.class);
8+
9+
public void eat() {
10+
LOGGER.info("animal is eating");
11+
}
12+
13+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.baeldung.casting;
2+
3+
import java.util.List;
4+
5+
public class AnimalFeeder {
6+
7+
public void feed(List<Animal> animals) {
8+
animals.forEach(animal -> {
9+
animal.eat();
10+
if (animal instanceof Cat) {
11+
((Cat) animal).meow();
12+
}
13+
});
14+
}
15+
16+
public void uncheckedFeed(List<Animal> animals) {
17+
animals.forEach(animal -> {
18+
animal.eat();
19+
((Cat) animal).meow();
20+
});
21+
}
22+
23+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.baeldung.casting;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
6+
public class Cat extends Animal implements Mew {
7+
private static final Logger LOGGER = LoggerFactory.getLogger(Cat.class);
8+
9+
public void eat() {
10+
LOGGER.info("cat is eating");
11+
}
12+
13+
public void meow() {
14+
LOGGER.info("meow");
15+
}
16+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.baeldung.casting;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
6+
public class Dog extends Animal {
7+
private static final Logger LOGGER = LoggerFactory.getLogger(Dog.class);
8+
9+
public void eat() {
10+
LOGGER.info("dog is eating");
11+
}
12+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.baeldung.casting;
2+
3+
public interface Mew {
4+
public void meow();
5+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.baeldung.casting;
2+
3+
import org.junit.Test;
4+
import static org.junit.Assert.*;
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class CastingTest {
9+
10+
@Test
11+
public void whenPrimitiveConverted_thenValueChanged() {
12+
double myDouble = 1.1;
13+
int myInt = (int) myDouble;
14+
assertNotEquals(myDouble, myInt);
15+
}
16+
17+
@Test
18+
public void whenUpcast_thenInstanceUnchanged() {
19+
Cat cat = new Cat();
20+
Animal animal = cat;
21+
animal = (Animal) cat;
22+
assertTrue(animal instanceof Cat);
23+
}
24+
25+
@Test
26+
public void whenUpcastToObject_thenInstanceUnchanged() {
27+
Object object = new Animal();
28+
assertTrue(object instanceof Animal);
29+
}
30+
31+
@Test
32+
public void whenUpcastToInterface_thenInstanceUnchanged() {
33+
Mew mew = new Cat();
34+
assertTrue(mew instanceof Cat);
35+
}
36+
37+
@Test
38+
public void whenUpcastToAnimal_thenOverridenMethodsCalled() {
39+
List<Animal> animals = new ArrayList<>();
40+
animals.add(new Cat());
41+
animals.add(new Dog());
42+
new AnimalFeeder().feed(animals);
43+
}
44+
45+
@Test
46+
public void whenDowncastToCat_thenMeowIsCalled() {
47+
Animal animal = new Cat();
48+
((Cat) animal).meow();
49+
}
50+
51+
@Test(expected = ClassCastException.class)
52+
public void whenDownCastWithoutCheck_thenExceptionThrown() {
53+
List<Animal> animals = new ArrayList<>();
54+
animals.add(new Cat());
55+
animals.add(new Dog());
56+
new AnimalFeeder().uncheckedFeed(animals);
57+
}
58+
}

0 commit comments

Comments
 (0)