[英]How to get rid of printing object memory location in output in java project with Query, QueryBuilder and Test classes?
在这个 java 项目中,我有三个名为 Query、QueryBuilder 和 Test 的类,它们由 main 方法组成。
查询.java
public class Query {
private String SELECT;
private String FROM;
private String WHERE;
private String ORDERBY;
public void printQuery() {
if (WHERE == null && ORDERBY == null)
System.out.println("SELECT " + SELECT + "\nFROM " + FROM + "\n");
if (WHERE == null && ORDERBY != null)
System.out.println("SELECT " + SELECT + "\nFROM " + FROM + "\nORDER BY " + ORDERBY + "\n");
if (WHERE != null && ORDERBY == null)
System.out.println("SELECT " + SELECT + "\nFROM " + FROM + "\nWHERE " + WHERE + "\n");
if (WHERE != null && ORDERBY != null)
System.out.println("SELECT " + SELECT + "\nFROM " + FROM + "\nWHERE " + WHERE + "\nORDER BY " + ORDERBY + "\n");
}
public String getSELECT() {
return SELECT;
}
public void setSELECT(String SELECT) {
this.SELECT = SELECT;
}
public String getFROM() {
return FROM;
}
public void setFROM(String FROM) {
this.FROM = FROM;
}
public String getWHERE() {
return WHERE;
}
public void setWHERE(String WHERE) {
this.WHERE = WHERE;
}
public String getORDERBY() {
return ORDERBY;
}
public void setORDERBY(String ORDERBY) {
this.ORDERBY = ORDERBY;
}
}
查询生成器
public class QueryBuilder {
private Query query;
public QueryBuilder() {
query = new Query();
}
public QueryBuilder setSelect(String selectString) {
query.setSELECT(selectString);
return this;
}
public QueryBuilder setFrom(String fromString) {
query.setFROM(fromString);
return this;
}
public QueryBuilder setWhere(String whereString) {
query.setWHERE(whereString);
return this;
}
public QueryBuilder setOrderBy(String orderByString) {
query.setORDERBY(orderByString);
return this;
}
public Query build() {
query.printQuery();
if (query.getFROM() == null && query.getSELECT() == null)
throw new IllegalStateException("Query must have a SELECT and a FROM");
if (query.getSELECT() == null)
throw new IllegalStateException("Query must have a SELECT");
if (query.getFROM() == null)
throw new IllegalStateException("Query must have a FROM");
return query;
}
}
测试.java
public class Test {
public static void main(String[] args) {
Query query1 = new QueryBuilder().setSelect("name").setFrom("student").build();
System.out.println(query1.toString());
Query query2 = new QueryBuilder().setSelect("name").setFrom("student").setWhere("name = 'Name1'").build();
System.out.println(query2.toString());
Query query3 = new QueryBuilder().setSelect("name").setWhere("name = 'Name1'").build();
System.out.println(query3.toString());
}
}
输出 - [1]: https : //i.stack.imgur.com/TNadC.png
SELECT name
FROM student
Query@2a139a55
SELECT name
FROM student
WHERE name = 'Name1'
Query@15db9742
SELECT name
FROM null
WHERE name = 'Name1'
Exception in thread "main" java.lang.IllegalStateException: Query must have a FROM
at QueryBuilder.build(QueryBuilder.java:38)
at Test.main(Test.java:9)
我需要摆脱在输出中打印对象内存位置。 (Query@2a139a55 和 Query@15db9742)。
提前致谢!
覆盖toString()
方法而不是定义一个printQuery()
方法:
@Override
public String toString() {
if (WHERE == null && ORDERBY == null)
return "SELECT " + SELECT + "\nFROM " + FROM + "\n";
if (WHERE == null && ORDERBY != null)
return "SELECT " + SELECT + "\nFROM " + FROM + "\nORDER BY " + ORDERBY + "\n";
if (WHERE != null && ORDERBY == null)
return "SELECT " + SELECT + "\nFROM " + FROM + "\nWHERE " + WHERE + "\n";
if (WHERE != null && ORDERBY != null)
return "SELECT " + SELECT + "\nFROM " + FROM + "\nWHERE " + WHERE + "\nORDER BY " + ORDERBY + "\n";
// should never happen
throw new IllegalStateException("Unhandled case");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.