if (p.getClass().getName().equals("java.lang.Win32Process") || p.getClass().getName().equals("java.lang.ProcessImpl")) { Field f = p.getClass().getDeclaredField("handle"); f.setAccessible(true); long handl = f.getLong(p); Kernel32 kernel = Kernel32.INSTANCE; WinNT.HANDLE hand = new WinNT.HANDLE(); hand.setPointer(Pointer.createConstant(handl)); result = kernel.GetProcessId(hand); f.setAccessible(false); }
时间: 2024-04-13 15:26:44 浏览: 31
这段代码是用于获取当前正在运行的进程的进程ID。它首先判断进程对象的类名是否为"java.lang.Win32Process"或"java.lang.ProcessImpl",如果是,则通过反射获取该进程对象的"handle"字段,并将其设置为可访问。然后,利用Kernel32库中的GetProcessId方法,将该进程的句柄转换为进程ID并存储在result变量中。最后,将"handle"字段设置为不可访问。
相关问题
用java 11.0.15重写if (p.getClass().getName().equals("java.lang.Win32Process") || p.getClass().getName().equals("java.lang.ProcessImpl")) { Field f = p.getClass().getDeclaredField("handle"); f.setAccessible(true); long handl = f.getLong(p); Kernel32 kernel = Kernel32.INSTANCE; WinNT.HANDLE hand = new WinNT.HANDLE(); hand.setPointer(Pointer.createConstant(handl)); result = kernel.GetProcessId(hand); f.setAccessible(false); }这个方法
在Java 11中,可以使用`java.lang.ProcessHandle`类来获取进程ID,而不需要使用反射和底层库。
```java
if (p.getClass().equals(ProcessHandle.class)) {
ProcessHandle.Info info = ((ProcessHandle) p).info();
result = info.pid();
}
```
这段代码首先判断进程对象的类是否为`ProcessHandle`类,然后使用`info()`方法获取进程信息对象。通过调用`pid()`方法,可以直接获取进程ID并存储在`result`变量中。这种方式更加简洁和可移植,不依赖于特定的操作系统或底层实现。
java list stream().distinct() 对象去重使用
如果要对一个 List 中的对象进行去重,可以使用 Java 8 中的 Stream API 和 distinct() 方法。
假设我们有一个 Person 类,它有两个属性 name 和 age:
```
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
现在我们有一个 List<Person>,我们想要按照 name 去重,可以使用以下代码:
```
List<Person> people = // 获取 List<Person> 对象
List<Person> uniquePeople = people.stream()
.distinct()
.collect(Collectors.toList());
```
需要注意的是,为了让 distinct() 方法正确去重,需要在 Person 类中实现 equals() 和 hashCode() 方法。如果没有实现,它会默认使用 Object 类中的 equals() 方法进行比较,这通常不是我们想要的。因此,Person 类应该像下面这样实现:
```
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
```
这样,当我们使用 distinct() 方法时,它就会正确地根据 name 进行去重。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)