我有一个Java项目,我有2个类。我需要使用Java反射来首先打印由ProjectAccount.java
类mywork.java
中的构造函数设置的默认值,然后我需要覆盖toString()
方法以传递{{1}的值类和打印它们。
我能够使用java反射来打印默认的构造函数集值。但是在尝试使用参数覆盖和打印mywork.java
方法时出现错误。
ProjectAccount.java
toString()
mywork.java
package relive;
public class ProjectAccount {
private String projectAccountID;
private double budget;
public int noOfProjects;
public ProjectAccount(){
this.projectAccountID = "MARTINDAWS-BillAnalyzer-001";
this.budget = 120000.00;
this.noOfProjects = 10;
}
@Override
public String toString(){
return "Project Accoutn ID = " + projectAccountID + " , Project Budget = "+budget + " , No of Projects = "+ noOfProjects;
}
}
输出和错误
我想我遇到了这个错误,因为我还没有覆盖package relive;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class mywork {
public static void main(String[] args) {
try{
Class<?> clazz = Class.forName("relive.ProjectAccount");
Constructor<?> constr = clazz.getDeclaredConstructor(null);
Method mets = clazz.getDeclaredMethod("toString", null);
Object obj = constr.newInstance(new Object[] {});
//Print Default values
System.out.println(mets.invoke(obj, null));
String mod_projectAccountID="ORPT-BT-EMP-DEV";
double mod_budget = 2200000.0;
int mod_noOfProjects = 20;
//Print new passed values using the overridden method
System.out.println(mets.invoke(obj, mod_projectAccountID,mod_budget, mod_noOfProjects));
}
catch(ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e){
e.printStackTrace();
}
}
public static String toString(String mod_projectAccountID, double mod_budget, int mod_noOfProjects){
return "Project Accoutn ID = " + mod_projectAccountID + " , Project Budget = "+mod_budget + " , No of Projects = "+ mod_noOfProjects;
}
}
方法。有关如何覆盖和打印此内容的任何建议都将受到高度赞赏。
答案 0 :(得分:0)
那里有一些问题。
mets
,引用了ProjectAccount
类mywork
不是ProjectAccount
子类覆盖方法的能力允许类从行为“足够接近”的超类继承,然后根据需要修改行为。覆盖方法具有相同的名称,参数的数量和类型,以及返回类型作为它覆盖的方法。重写方法还可以返回由重写方法返回的类型的子类型。此子类型称为协变返回类型。
package de.me.example;
public class SuperType {
@Override
public String toString() {
return "SuperType";
}
}
package de.me.example;
public class SubType extends SuperType {
// this annatotion is syntactic sugar nothing more,
//it behaves the same without it
@Override
public String toString() {
return "SubType";
}
}
答案 1 :(得分:0)
我刚刚修改了const checkAuth = (req, res, next) => {
// logic for checking auth
if (authorized) {
return next();
}
res.status(401).send('NEED AUTH');
};
router.post('/login', checkAuth, (req, res, next) => {
// actual logic for login
});
类来直接访问router.post('/logic', checkAuth, rateLimit, (req, res, next) => {});
类变量并设置它们。
我访问了声明的字段,并根据变量的名称或类型修改了声明的变量,并调用了相同的mywork.java
方法而没有覆盖ProjectAccount.java
方法。
<强> mywork.java 强>
toString()
<强>输出强>