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
3 changes: 3 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ repositories {
}

dependencies {
compileOnly("org.projectlombok:lombok:1.18.42")
annotationProcessor("org.projectlombok:lombok:1.18.42")

testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
Expand Down
91 changes: 85 additions & 6 deletions src/main/java/org/example/GenerateExample.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,96 @@
package org.example;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import org.example.classes.Example;
import org.example.classes.*;
import org.example.generator.Generator;

public class GenerateExample {
public static void main(String[] args) {
public static void main(String[] args) throws NoSuchFieldException {
var gen = new Generator();

System.out.println("=== Testing Generator ===");

try {
System.out.println("\n1. Generating Example:");
Object example = gen.generateValueOfType(Example.class);
System.out.println("Generated: " + example);
} catch (Exception e) {
System.err.println("Error generating Example: " + e.getMessage());
}

try {
Object generated = gen.generateValueOfType(Example.class);
System.out.println(generated);
} catch (Throwable e) {
throw new RuntimeException(e);
System.out.println("\n2. Generating Shape:");
Object shape = gen.generateValueOfType(Shape.class);
System.out.println("Generated: " + shape);
if (shape instanceof Shape s) {
System.out.println("Area: " + s.getArea());
System.out.println("Perimeter: " + s.getPerimeter());
}
} catch (Exception e) {
System.err.println("Error generating Shape: " + e.getMessage());
}

try {
System.out.println("\n3. Generating Product:");
Object product = gen.generateValueOfType(Product.class);
System.out.println("Generated: " + product);
} catch (Exception e) {
System.err.println("Error generating Product: " + e.getMessage());
}

try {
System.out.println("\n4. Generating Rectangle:");
Object rectangle = gen.generateValueOfType(Rectangle.class);
System.out.println("Generated: " + rectangle);
if (rectangle instanceof Rectangle r) {
System.out.println("Area: " + r.getArea());
System.out.println("Perimeter: " + r.getPerimeter());
}
} catch (Exception e) {
System.err.println("Error generating Rectangle: " + e.getMessage());
}

try {
System.out.println("\n5. Generating Triangle:");
Object triangle = gen.generateValueOfType(Triangle.class);
System.out.println("Generated: " + triangle);
if (triangle instanceof Triangle t) {
System.out.println("Area: " + t.getArea());
System.out.println("Perimeter: " + t.getPerimeter());
}
} catch (Exception e) {
System.err.println("Error generating Triangle: " + e.getMessage());
}

try {
System.out.println("\n6. Generating Cart:");
Object cart = gen.generateValueOfType(Cart.class);
System.out.println("Generated: " + cart);
} catch (Exception e) {
System.err.println("Error generating Cart: " + e.getMessage());
}

try {
System.out.println("\n7. Generating BinaryTreeNode:");
Object node = gen.generateValueOfType(BinaryTreeNode.class);
System.out.println("Generated: " + node);
} catch (Exception e) {
System.err.println("Error generating BinaryTreeNode: " + e.getMessage());
}

Field items = Cart.class.getDeclaredField("items");
Type genericType = items.getGenericType();
if (genericType instanceof ParameterizedType pType) {
Type[] actualTypeArguments = pType.getActualTypeArguments();
for (Type type : actualTypeArguments) {
if (type instanceof Class<?> elementClass) {
System.out.println("Declared element type: " + elementClass.getName());
// Output: Declared element type: java.lang.String
}
}
}
}
}
29 changes: 9 additions & 20 deletions src/main/java/org/example/classes/BinaryTreeNode.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
package org.example.classes;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.example.generator.Generatable;

@Getter
@Setter
@ToString
@Generatable
public class BinaryTreeNode {
private Integer data;
private BinaryTreeNode left;
Expand All @@ -10,24 +19,4 @@ public BinaryTreeNode(Integer data, BinaryTreeNode left, BinaryTreeNode right) {
this.left = left;
this.right = right;
}

public Integer getData() {
return data;
}

public BinaryTreeNode getLeft() {
return left;
}

public BinaryTreeNode getRight() {
return right;
}

public void setLeft(BinaryTreeNode left) {
this.left = left;
}

public void setRight(BinaryTreeNode right) {
this.right = right;
}
}
5 changes: 5 additions & 0 deletions src/main/java/org/example/classes/Cart.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

import java.util.List;

import lombok.ToString;
import org.example.generator.Generatable;

@ToString
@Generatable
public class Cart {
private List<Product> items;

Expand Down
13 changes: 8 additions & 5 deletions src/main/java/org/example/classes/Example.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package org.example.classes;

import java.util.Map;

import lombok.ToString;
import org.example.generator.Generatable;

@ToString
@Generatable
public class Example {
int i;
public Map<Cart, Product> myMap;

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

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

import lombok.ToString;
import org.example.generator.Generatable;

@ToString
@Generatable
public class Product {
private String name;
private double price;
Expand Down Expand Up @@ -40,9 +45,4 @@ public boolean equals(Object obj) {
return super.equals(obj);
}

@Override
public String toString() {
return super.toString();
}

}
5 changes: 5 additions & 0 deletions src/main/java/org/example/classes/Rectangle.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package org.example.classes;

import lombok.ToString;
import org.example.generator.Generatable;

@ToString
@Generatable
public class Rectangle implements Shape {
private double length;
private double width;
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/org/example/classes/Triangle.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package org.example.classes;

import lombok.ToString;
import org.example.generator.Generatable;

@ToString
@Generatable
public class Triangle implements Shape {
private double sideA;
private double sideB;
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/org/example/generator/Generatable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.example.generator;

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 {
}
Loading