Java 在反编译类中工作时出现ImmutablePair和Pair编译错误
我创建了以下最小的、可复制的示例 我有一个编译错误Java 在反编译类中工作时出现ImmutablePair和Pair编译错误,java,apache-commons,Java,Apache Commons,我创建了以下最小的、可复制的示例 我有一个编译错误 import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import org.apache.commons.lang3.
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
public class TestClass
{
/**
* @param args
*/
public static void main(final String[] args)
{
final Map<ObjectAttributesValueContainer, Set<CompareAttribute>> differences = null;
final Map<CompareAttribute, Collection<ObjectAttributesValueContainer>> differentObjectsForAttributes = (Map) differences
.entrySet().stream().flatMap((entry) -> {
return ((Set) entry.getValue()).stream().map((attr) -> {
return new ImmutablePair(entry.getKey(), attr);
});
}).collect(Collectors.toMap(Pair::getValue, (pair) -> {
return new HashSet(Collections.singleton(pair.getKey()));
}, (a1, a2) -> {
a1.addAll(a2);
return a1;
}));
}
}
class CompareAttribute
{
private String qualifier;
private String group;
public CompareAttribute(final String qualifier)
{
this.qualifier = qualifier;
}
public CompareAttribute(final String qualifier, final String group)
{
this(qualifier);
this.group = group;
}
public String getQualifier()
{
return this.qualifier;
}
public void setQualifier(final String qualifier)
{
this.qualifier = qualifier;
}
public String getGroup()
{
return this.group;
}
public void setGroup(final String group)
{
this.group = group;
}
@Override
public boolean equals(final Object o)
{
if (this == o)
{
return true;
}
else if (o == null)
{
return false;
}
else if (o.getClass() != this.getClass())
{
return false;
}
else
{
final CompareAttribute that = (CompareAttribute) o;
if (!this.qualifier.equals(that.qualifier))
{
return false;
}
else if (((CompareAttribute) o).getGroup() == null && this.group == null)
{
return true;
}
else
{
return ((CompareAttribute) o).getGroup() != null && this.group != null ? this.group.equals(that.group) : false;
}
}
}
@Override
public int hashCode()
{
int result = this.qualifier.hashCode();
if (this.group != null)
{
result = 31 * result + this.group.hashCode();
}
return result;
}
@Override
public String toString()
{
return this.qualifier + (this.group != null ? '@' + this.group : "");
}
}
class ObjectAttributesValueContainer
{
private final Object object;
private final Map<CompareAttribute, Object> attributeValues;
public ObjectAttributesValueContainer(final Object object)
{
this.object = object;
this.attributeValues = new HashMap();
}
public Object getObject()
{
return this.object;
}
public Map<CompareAttribute, Object> getAttributeValues()
{
return this.attributeValues;
}
}
日蚀。“类型对未定义适用于此处的getValue(对象)”
IntelliJ说
我试图使用jar文件中的部分逻辑,所以我并没有编写这个逻辑,但这段代码在反编译类中运行良好
我把这个逻辑放在自己的类中,并得到编译错误
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
public class TestClass
{
/**
* @param args
*/
public static void main(final String[] args)
{
final Map<ObjectAttributesValueContainer, Set<CompareAttribute>> differences = null;
final Map<CompareAttribute, Collection<ObjectAttributesValueContainer>> differentObjectsForAttributes = (Map) differences
.entrySet().stream().flatMap((entry) -> {
return ((Set) entry.getValue()).stream().map((attr) -> {
return new ImmutablePair(entry.getKey(), attr);
});
}).collect(Collectors.toMap(Pair::getValue, (pair) -> {
return new HashSet(Collections.singleton(pair.getKey()));
}, (a1, a2) -> {
a1.addAll(a2);
return a1;
}));
}
}
class CompareAttribute
{
private String qualifier;
private String group;
public CompareAttribute(final String qualifier)
{
this.qualifier = qualifier;
}
public CompareAttribute(final String qualifier, final String group)
{
this(qualifier);
this.group = group;
}
public String getQualifier()
{
return this.qualifier;
}
public void setQualifier(final String qualifier)
{
this.qualifier = qualifier;
}
public String getGroup()
{
return this.group;
}
public void setGroup(final String group)
{
this.group = group;
}
@Override
public boolean equals(final Object o)
{
if (this == o)
{
return true;
}
else if (o == null)
{
return false;
}
else if (o.getClass() != this.getClass())
{
return false;
}
else
{
final CompareAttribute that = (CompareAttribute) o;
if (!this.qualifier.equals(that.qualifier))
{
return false;
}
else if (((CompareAttribute) o).getGroup() == null && this.group == null)
{
return true;
}
else
{
return ((CompareAttribute) o).getGroup() != null && this.group != null ? this.group.equals(that.group) : false;
}
}
}
@Override
public int hashCode()
{
int result = this.qualifier.hashCode();
if (this.group != null)
{
result = 31 * result + this.group.hashCode();
}
return result;
}
@Override
public String toString()
{
return this.qualifier + (this.group != null ? '@' + this.group : "");
}
}
class ObjectAttributesValueContainer
{
private final Object object;
private final Map<CompareAttribute, Object> attributeValues;
public ObjectAttributesValueContainer(final Object object)
{
this.object = object;
this.attributeValues = new HashMap();
}
public Object getObject()
{
return this.object;
}
public Map<CompareAttribute, Object> getAttributeValues()
{
return this.attributeValues;
}
}
import java.util.Collection;
导入java.util.Collections;
导入java.util.HashMap;
导入java.util.HashSet;
导入java.util.Map;
导入java.util.Set;
导入java.util.stream.collector;
导入org.apache.commons.lang3.tuple.ImmutablePair;
导入org.apache.commons.lang3.tuple.Pair;
公共类TestClass
{
/**
*@param args
*/
公共静态void main(最终字符串[]args)
{
最终映射差异=空;
最终映射差异对象属性=(映射)差异
.entrySet().stream().flatMap((条目)->{
return((Set)entry.getValue()).stream().map((attr)->{
返回新的ImmutablePair(entry.getKey(),attr);
});
}).collect(Collectors.toMap(Pair::getValue,(Pair)->{
返回新的HashSet(Collections.singleton(pair.getKey());
},(a1,a2)->{
a1.addAll(a2);
返回a1;
}));
}
}
类比较属性
{
私有字符串限定符;
私有字符串组;
公共比较属性(最终字符串限定符)
{
this.qualifier=限定符;
}
公共比较属性(最终字符串限定符、最终字符串组)
{
这个(限定词);
this.group=组;
}
公共字符串getQualifier()
{
返回此.qualifier;
}
公共void setQualifier(最终字符串限定符)
{
this.qualifier=限定符;
}
公共字符串getGroup()
{
返回此.group;
}
公共void集合组(最终字符串组)
{
this.group=组;
}
@凌驾
公共布尔等于(最终对象o)
{
if(this==o)
{
返回true;
}
else如果(o==null)
{
返回false;
}
如果(o.getClass()!=this.getClass()),则为else
{
返回false;
}
其他的
{
最终的CompareAttribute,它=(CompareAttribute)o;
如果(!this.qualifier.equals(that.qualifier))
{
返回false;
}
else if(((CompareAttribute)o).getGroup()==null&&this.group==null)
{
返回true;
}
其他的
{
return((CompareAttribute)o.getGroup()!=null&&this.group!=null?this.group.equals(that.group):false;
}
}
}
@凌驾
公共int hashCode()
{
int result=this.qualifier.hashCode();
如果(this.group!=null)
{
result=31*result+this.group.hashCode();
}
返回结果;
}
@凌驾
公共字符串toString()
{
返回this.qualifier+(this.group!=null?'@'+this.group:);
}
}
类ObjectAttributesValueContainer
{
私有最终客体;
私有最终地图属性值;
public ObjectAttributesValueContainer(最终对象)
{
this.object=对象;
this.attributeValues=新的HashMap();
}
公共对象getObject()
{
返回此.object;
}
公共映射getAttributeValues()
{
返回此.attributeValue;
}
}
您无法强制转换为特定类型的映射,因此我删除了该映射。你的
return ((Set) entry.getValue()).stream().map((attr) -> {...
无法工作,因为flatmap
必须返回流
我做了一些假设,并添加了一些类型。现在至少它可以编译了。首先,我删除了警告:
public ObjectAttributesValueContainer(final Object object) {
this.object = object;
// this.attributeValues = new HashMap();
this.attributeValues = new HashMap<>();
}
public ObjectAttributesValueContainer(最终对象){
this.object=对象;
//this.attributeValues=新的HashMap();
this.attributeValues=新的HashMap();
}
然后我跟踪了这些类型:
final Map<CompareAttribute, Collection<ObjectAttributesValueContainer>>
differentObjectsForAttributes =
differences
.entrySet()
.stream()
.flatMap((entry) ->
entry.getValue() // Set<CompareAttribute>
.stream()
.map((attr) -> {return new ImmutablePair<ObjectAttributesValueContainer,CompareAttribute>
(entry.getKey(), attr);}
))
// now we have a stream of ImmutablePair<ObjectAttributesValueContainer,CompareAttribute>
.collect(Collectors.toMap(Pair::getValue,
(pair) -> {return new HashSet<ObjectAttributesValueContainer>
(Collections.singleton(pair.getKey()));
},
(a1, a2) -> {a1.addAll(a2);
return a1;
}
));
最终地图
不同的对象属性=
分歧
.entrySet()
.stream()
.flatMap((条目)->
entry.getValue()//设置
.stream()
.map((attr)->{返回新的ImmutablePair
(entry.getKey(),attr);}
))
//现在我们有了一个ImmutablePair流
.collect(收集器).toMap(对::getValue、,
(对)->{返回新哈希集
(Collections.singleton(pair.getKey());
},
(a1,a2)->{a1.addAll(a2);
返回a1;
}
));
您无法强制转换为特定类型的映射,因此我删除了该映射。你的
return ((Set) entry.getValue()).stream().map((attr) -> {...
无法工作,因为flatmap
必须返回流
我做了一些假设,并添加了一些类型。现在至少它可以编译了。首先,我删除了警告:
public ObjectAttributesValueContainer(final Object object) {
this.object = object;
// this.attributeValues = new HashMap();
this.attributeValues = new HashMap<>();
}
public ObjectAttributesValueContainer(最终对象){
this.object=对象;
//this.attributeValues=新的HashMap();
this.attributeValues=新的HashMap();
}
然后我跟踪了这些类型:
final Map<CompareAttribute, Collection<ObjectAttributesValueContainer>>
differentObjectsForAttributes =
differences
.entrySet()
.stream()
.flatMap((entry) ->
entry.getValue() // Set<CompareAttribute>
.stream()
.map((attr) -> {return new ImmutablePair<ObjectAttributesValueContainer,CompareAttribute>
(entry.getKey(), attr);}
))
// now we have a stream of ImmutablePair<ObjectAttributesValueContainer,CompareAttribute>
.collect(Collectors.toMap(Pair::getValue,
(pair) -> {return new HashSet<ObjectAttributesValueContainer>
(Collections.singleton(pair.getKey()));
},
(a1, a2) -> {a1.addAll(a2);
return a1;
}
));
最终地图
不同的对象属性=
分歧
.entrySet()
.stream()
.flatMap((条目)->
entry.getValue()//设置
.stream()
.map((attr)->{返回新的ImmutablePa