Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/4ISSpVK4)
**Java reflection**

Ваша задача --- написать генератор экземпляров произвольных классов.
Expand Down
9 changes: 9 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,15 @@ repositories {
mavenCentral()
}

java {
sourceCompatibility = JavaVersion.VERSION_21
}

dependencies {
implementation("org.slf4j:slf4j-api:2.0.17")
implementation("ch.qos.logback:logback-classic:1.5.18")
}

dependencies {
testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
Expand Down
51 changes: 49 additions & 2 deletions src/main/java/org/example/GenerateExample.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,64 @@
package org.example;


import org.example.classes.BinaryTreeNode;
import org.example.classes.Cart;
import org.example.classes.Example;
import org.example.classes.Product;
import org.example.classes.Shape;
import org.example.classes.Triangle;
import org.example.generator.Generator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.InvocationTargetException;

public class GenerateExample {
private static final String PACKAGE_NAME = "org.example";
private static final Logger log = LoggerFactory.getLogger(GenerateExample.class);

public static void main(String[] args) {
var gen = new Generator();
try {
Object generated = gen.generateValueOfType(Example.class);
System.out.println(generated);
generateWithAnnotatedAbstractClass(gen);
generateRandomInterfaceImplementation(gen);
generateRecursiveDataStructure(gen);
generateSimpleClass(gen);
generateWithCollections(gen);
generateTriangle(gen);
} catch (Throwable e) {
throw new RuntimeException(e);
}
}

private static void generateWithAnnotatedAbstractClass(Generator generator) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException {
Object generated = generator.generateByType(Example.class, PACKAGE_NAME);
log.info("Generated: {}", generated);
}

private static void generateRandomInterfaceImplementation(Generator generator) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException {
Object generated = generator.generateByType(Shape.class, PACKAGE_NAME);
log.info("Generated: {}", generated);
}

private static void generateRecursiveDataStructure(Generator generator) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException {
Object generated = generator.generateByType(BinaryTreeNode.class, PACKAGE_NAME);
log.info("Generated: {}", generated);
}

private static void generateSimpleClass(Generator generator) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException {
Object generated = generator.generateByType(Product.class, PACKAGE_NAME);
log.info("Generated: {}", generated);
}

private static void generateWithCollections(Generator generator) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException {
Object generated = generator.generateByType(Cart.class, PACKAGE_NAME);
log.info("Generated: {}", generated);
}

private static void generateTriangle(Generator generator) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException {
Triangle generated = (Triangle) generator.generateByType(Triangle.class, PACKAGE_NAME);
log.info("Generated: {}", generated);
log.info("Triangle perimeter is = {}", generated.getPerimeter());
}
}
11 changes: 11 additions & 0 deletions src/main/java/org/example/annotation/Generatable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.example.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Generatable {
}
12 changes: 12 additions & 0 deletions src/main/java/org/example/classes/AbstractExample.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.example.classes;

import org.example.annotation.Generatable;

@Generatable
public abstract class AbstractExample {
protected int x;

public AbstractExample(int x) {
this.x = x;
}
}
12 changes: 12 additions & 0 deletions src/main/java/org/example/classes/BinaryTreeNode.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package org.example.classes;

import org.example.annotation.Generatable;

@Generatable
public class BinaryTreeNode {
private Integer data;
private BinaryTreeNode left;
Expand Down Expand Up @@ -30,4 +33,13 @@ public void setLeft(BinaryTreeNode left) {
public void setRight(BinaryTreeNode right) {
this.right = right;
}

@Override
public String toString() {
return "BinaryTreeNode{" +
"data=" + data +
", left=" + left +
", right=" + right +
'}';
}
}
18 changes: 16 additions & 2 deletions src/main/java/org/example/classes/Cart.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package org.example.classes;

import org.example.annotation.Generatable;

import java.util.List;
import java.util.Map;

@Generatable
public class Cart {
private List<Product> items;
private Map<String, Product> products;

public Cart(List<Product> items) {
public Cart(List<Product> items,Map<String, Product> products) {
this.items = items;
this.products = products;
}

public List<Product> getItems() {
Expand All @@ -17,5 +23,13 @@ public void setItems(List<Product> items) {
this.items = items;
}

// Конструктор, методы добавления и удаления товаров, геттеры и другие методы
// Конструктор, методы добавления и удаления товаров, геттеры и другие методы

@Override
public String toString() {
return "Cart{" +
"items=" + items +
", products=" + products +
'}';
}
}
14 changes: 11 additions & 3 deletions src/main/java/org/example/classes/Example.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
package org.example.classes;

public class Example {
public class Example extends AbstractExample {
int i;

public Example(int i) {
public Example(int i, int x) {
super(x);
this.i = i;
}

public Example(int x) {
super(x);
}

@Override
public String toString() {
return "Example(" + i + ")";
return "Example{" +
"i=" + i +
", x=" + x +
'}';
}
}
9 changes: 7 additions & 2 deletions src/main/java/org/example/classes/Product.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package org.example.classes;

import org.example.annotation.Generatable;

@Generatable
public class Product {
private String name;
private double price;
Expand Down Expand Up @@ -42,7 +45,9 @@ public boolean equals(Object obj) {

@Override
public String toString() {
return super.toString();
return "Product{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}

}
8 changes: 8 additions & 0 deletions src/main/java/org/example/classes/Rectangle.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,12 @@ public double getArea() {
public double getPerimeter() {
return 2 * (length + width);
}

@Override
public String toString() {
return "Rectangle{" +
"length=" + length +
", width=" + width +
'}';
}
}
3 changes: 3 additions & 0 deletions src/main/java/org/example/classes/Shape.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package org.example.classes;

import org.example.annotation.Generatable;

@Generatable
public interface Shape {
double getArea();
double getPerimeter();
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/org/example/classes/Triangle.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,13 @@ public double getArea() {
public double getPerimeter() {
return sideA + sideB + sideC;
}

@Override
public String toString() {
return "Triangle{" +
"sideA=" + sideA +
", sideB=" + sideB +
", sideC=" + sideC +
'}';
}
}
Loading