通过反射获取`com.itheima.Cat`这个类的成员方法`Method`,请拿到无参数的`run`方法并调用,请拿到带`String`参数的`eat`方法并调用。
时间: 2023-10-23 22:10:01 浏览: 57
好的,下面是使用反射获取`com.itheima.Cat`类的成员方法并调用的示例代码:
```java
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) {
try {
// 加载Cat类
Class<?> catClass = Class.forName("com.itheima.Cat");
// 获取无参数的run方法
Method runMethod = catClass.getMethod("run");
// 创建Cat对象
Object catObj = catClass.newInstance();
/
相关问题
Mapper method 'com.itheima.mapper.CategoryMapper.deleteId' has an unsupported return type: class com.itheima.pojo.Category
这个错误提示表明你在Spring Data JPA或者MyBatis中遇到了一个问题。通常,当你尝试通过`CategoryMapper`的`deleteId`方法删除Category实体(`com.itheima.pojo.Category`),但是返回类型不是预期的void,而是`Category`本身。
在ORM框架如JPA或MyBatis中,删除操作通常不返回被删除的对象,因为它们关心的是操作是否成功而非具体的删除结果。如果你的`deleteId`方法期望删除并返回已被删除的Category,那么这在设计上可能是不符合常规的。
正确的做法应该是定义一个无返回值的方法,表示删除操作,例如:
```java
// 正确的删除方法,不返回Category对象
public void deleteById(Long id) {
categoryMapper.deleteById(id);
}
// 如果需要查询删除后的数量或其他信息,应该另外定义方法
public int deleteCategoryByCondition(Category category) {
return categoryMapper.delete(category);
}
```
Exception in thread "饿汉1" java.lang.IllegalMonitorStateException: current thread is not owner at java.base/java.lang.Object.wait(Native Method) at java.base/java.lang.Object.wait(Object.java:338) at com.itheima.d7_thread_communication.Desk.get(Desk.java:33) at com.itheima.d7_thread_communication.ThreadTest.lambda$main$3(ThreadTest.java:24) at java.base/java.lang.Thread.run(Thread.java:833) Exception in thread "饿汉2" java.lang.IllegalMonitorStateException: current thread is not owner at java.base/java.lang.Object.wait(Native Method) at java.base/java.lang.Object.wait(Object.java:338) at com.itheima.d7_thread_communication.Desk.get(Desk.java:33) at com.itheima.d7_thread_communication.ThreadTest.lambda$main$4(ThreadTest.java:27) at java.base/java.lang.Thread.run(Thread.java:833)
这个错误是 IllegalMonitorStateException,意思是当前线程不是锁的拥有者,不能进行wait或notify操作。在你的代码中,线程在 Desk 类的 get() 方法中调用了 wait() 方法,但是没有先获取锁,因此抛出了该异常。
要解决这个问题,你需要在调用 wait() 方法之前先获取锁,可以使用 synchronized 关键字来实现。在 Desk 类的 get() 方法中,将 wait() 方法调用放在一个 synchronized 块中,如下所示:
```
public synchronized void get() {
while (flag == false) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("取走:" + this.name + "-" + this.sex);
flag = false;
notify();
}
```
这样,当线程调用 get() 方法时,会先获取 Desk 对象的锁,然后再调用 wait() 方法等待。当其他线程调用 put() 方法并修改了 flag 值后,会调用 notify() 方法唤醒等待的线程。唤醒后,该线程会重新尝试获取锁并继续执行代码。
阅读全文