Java代码:
class Animal {}
class Cat extends Animal {}
class Box<T> {}
public class Test {
public void hello(Box<? extends Animal> box) {}
}
Box<Animal> box1 = new Box<Animal>();
Box<Cat> box2 = new Box<Cat>();
new Test().hello(box1);
new Test().hello(box2);
Run Code Online (Sandbox Code Playgroud)
从Liskov替换原则,因为box2类型Box<Cat>可以在需要类型的地方使用Box<? extends Animal>,我可以说:
Box<Cat> is subtype of Box<? extends Animal>
其实:我不是,如果甚至不确定Box<? extends Animal>和? extends Animal有型
我正在写一个注释处理器.我怎样才能获得数组的类型?
@MyAnnotation
int[] iArray;
@MyAnnotation
boolean[] bArray;
@MyAnnotation
FooClass[] fooArray;
Run Code Online (Sandbox Code Playgroud)
据我所知,我可以检查它是否是这样的数组:
if (element.asType().getKind() == TypeKind.ARRAY) {
// it's an array
// How to check if its an array of boolean or an array integer, etc.?
}
Run Code Online (Sandbox Code Playgroud)
我如何获得数组的类型?
基本上我迭代所有注释的元素@MyAnnotation,我将根据数组的类型对数组做一些特殊的事情,类似于:
for (Element element : enviroment.getElementsAnnotatedWith(MyAnnotation.class)) {
if (element.getKind() != ElementKind.FIELD)
continue;
if (element.asType().getKind() == TypeKind.ARRAY) {
// it's an array
// How to distinguish between array of boolean or an array integer, etc.?
}
}
Run Code Online (Sandbox Code Playgroud) 在下面的Java 8代码示例中,所有方法都是等效的,除了foo3()之外的所有方法都是编译的.
我怀疑这里涉及的Java编译时泛型有一些更好的点,但它们对我来说似乎并不清楚,而且远非显而易见.
import java.util.function.Function;
public class LambdaTest<T> {
public T foo1(T t) {
Function<T, T> myIdentity = r -> r;
return myIdentity.apply(t);
}
public T foo2(T t) {
Function<T, T> identity = Function.identity();
return identity.apply(t);
}
public T foo3(T t) {
/* XXX Compile error!
* java.lang.Error: Unresolved compilation problem:
* Type mismatch: cannot convert from Object to T
*/
return Function.identity().apply(t);
}
@SuppressWarnings("unchecked")
public T foo4(T t) {
// unchecked conversion from Function<Object, …Run Code Online (Sandbox Code Playgroud) 我想简单地传递一个lambda(代码块)并在需要时执行它.如何executeLambda(...)在下面的代码中实现该方法(以及方法签名是什么):
public static void main(String[] args)
{
String value = "Hello World";
executeLambda(value -> print(value));
}
public static void print(String value)
{
System.out.println(value);
}
public static void executeLambda(lambda)
{
someCode();
lamda.executeLambdaCode();
someMoreCode();
}
Run Code Online (Sandbox Code Playgroud) 所以我正在对Haskell进行测试,一个问题说:
让功能成为
lolo g x = ys
where ys = [x] ++ filter (curry g x) ys
Run Code Online (Sandbox Code Playgroud)
然后确定名为lolo的函数的类型.选项是:
a) (a,b) -> Bool -> b -> [(a,b)]
b) (b -> b -> b) -> Bool -> [b]
c) ((b,b) -> Bool) -> b -> [b]
d) (a -> b -> Bool) -> b -> [c]
Run Code Online (Sandbox Code Playgroud)
有人可以解释它是哪一个,为什么?我真的很困惑这个......我不明白的是:
1)咖喱功能只适用于功能吗?不是可能是元组的数据类型?那么你可以推断出g在这种情况下是一个函数吗?如果g和x都是函数怎么办?是否有可能使用咖喱与第n个参数?我只看到咖喱与1参数一起使用.
2)我不太了解的另一件事是ys定义中的递归.所以ys是由ys定义的,但是在这种情况下我没有看到基本情况.它会永远结束吗?也许是过滤函数使递归结束.
3)还在咖喱gx =咖喱(gx)对吧?(这是关于功能应用优先级的问题)
非常感谢
我不能使pack()方法工作.我尝试了几件事.我的代码目前看起来像这样:
第1类:
public static void main( String[] args )
{
java.awt.EventQueue.invokeLater(new Runnable() {
public void run()
{
JavaGui mygui = new JavaGui();
// mygui.setSize(1154, 753);
mygui.setVisible(true);
mygui.pack();
Run Code Online (Sandbox Code Playgroud)
第2类:
public class JavaGui extends javax.swing.JFrame
{
public JavaGui()
{
getContentPane().setLayout(null);
..
getContentPane().add(panelLeft);
...
getContentPane().add(panelRight);
Run Code Online (Sandbox Code Playgroud)
我尝试将pack方法放在任何地方,但它不能用这种方式添加gui元素.有什么建议吗?我也尝试将所有内容添加到JFrame而不是getContentPane(),但我也无法做到这一点.
我想创建一个类似下面的地图 - >
Map<Pair<MyClass.a, MyClass.b>, MyClass>>.
Run Code Online (Sandbox Code Playgroud)
我有一个对象列表 - >
List<MyClass>
Run Code Online (Sandbox Code Playgroud)
这里的Pair是一个类,已经在我的项目中,所以我想使用它.
我需要帮助从Java 8流创建它.
我试过::
ls.stream().collect(Collectors.toMap(new Pair(MyClass.a, MyClass.b), MyClass));
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个错误.我是Java 8的新手并且正在努力学习它.
添加示例:
class Person {
String name ;
int age ;
// Some other variables
}
Run Code Online (Sandbox Code Playgroud)
我有一份清单List<Person>.
在我的要求中,我需要一个键= {name,age},使用对类.
class Pair<T,U> {
Pair(T t, U u) {
this.t = t
this.u = u
}
// Overridden hashCode && equals methods
}
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个类似的地图 Map<Pair<String, Int>, Person>
我收到一个编译器错误,说"不是一个功能接口".
我相信必须通过java 8流和收集方式.
我正在使用高于 2.2.5 和 Java 15、lombok、Mapstruct 的最新版本的 Spring boot 来映射一些 pojo。
使用spring boot 2.2.5 版时,我得到了预期的结果:
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2021-01-02T21:59:24+0100",
comments = "version: 1.4.1.Final, compiler: javac, environment: Java 15.0.1 (Oracle Corporation)"
)
@Component
public class ProduitMapperImpl implements ProduitMapper {
@Override
public ProduitDtoResponse produitToProduitDtoResponse(Produit produit) {
if ( produit == null ) {
return null;
}
ProduitDtoResponseBuilder produitDtoResponse = ProduitDtoResponse.builder();
produitDtoResponse.id( produit.getId() );
produitDtoResponse.nom( produit.getNom() );
produitDtoResponse.prix( produit.getPrix() );
return produitDtoResponse.build();
}
@Override
public Produit produitToProduitDtoResponse(ProduitDtoResponse produitDto) { …Run Code Online (Sandbox Code Playgroud) 我有以下课程:
public class GeneralClass
{
public int x;
public int[] arr = new int[3];
}
Run Code Online (Sandbox Code Playgroud)
以下逻辑:
public void loadClass(Class cls) {
Field[] fields = cls.getDeclaredFields();
for (Field field : fields) {
if (field.getType().isArray()) {
// How can I print the array length ?
}
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么知道数组的大小(长度)是多少?
我有系统(在c#中)来控制用户访问。对于特定情况,
我需要在java中具有相同的访问控制器。
该控制器具有密码算法(rijndael)。我的问题是这个算法使用字节数组(byte[]);这个字节类型在c#中是0 to 255,在java中是-128 to 127。这种差异会产生不同的结果。
如何使这两个代码使用相同的字节数组?
PS:我无法更改c#代码;如果可以的话,我会使用 sbyte 而不是 byte。
我是Haskell的新手,目前正在研究它进行考试.我一直在从learnyouahaskell学习它.我不理解组函数中的以下let-expression.
splitWhen :: (a -> Bool) -> [a] -> ([a],[a])
splitWhen p xs = (takeWhile (not . p) xs, dropWhile (not . p) xs)
group :: (Eq a) => [a] -> [[a]]
group [] = []
group (x:xs) = let (group1, rest) = splitWhen (/=x) xs
in (x:group1) : group rest
Run Code Online (Sandbox Code Playgroud)
我知道什么是splitWhen: splitWhen even [1,2,3] => ([1],[2,3])
我知道功能组产生如下:
group [1,1,2,1,3,3,3] => [[1,1],[2],[1],[3,3,3]]
Run Code Online (Sandbox Code Playgroud)
我不明白它是如何工作的.有人可以向我解释一下吗?谢谢.
我需要拆分文本(String),文本就像这样:
[title],[description blablablablablabla]
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我需要在String []中存储括号之间的2个文本,用","分隔.